今天初学了使用lxml爬取网站信息,首先遇到的问题就是在cmd中install lxml一直报错,升级到最新版本还是下载不了,后来就去查询网络上的一些其他解决方法,发现很多人都是自己去网站:https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml 里下载适合自己的python版本的lxml。
结果发现里面列出的lxml根本没有对应我的python3.8版本(由于本人刚开始使用时下载的python2.7,后来发现种种问题,就去下载了最新版本的python)结果就尴尬了,先尝试着下载3.7版本的lxml,然后本地安装时报出了安装版本错误的提示,此时发现必须要抛弃python3.8了,于是果断回官网下载了3.7版本,emmm,然后在一段时间的等待后才成功下载,然后又是一段流水线的配置以及安装,然后才开始正是编程:
1.首先是导入包
import requests
from lxml import etree
#这里创建了一个全局变量用来后面显示信息的数量
index = 1
2.然后开始请求网站,由于网站会有很多反爬虫机制,所以为了使我们能够正确的访问到网站中信息,于是在此处需要把我们的访问伪装成浏览器,只要在要访问的网页中点击F12,打开network然后重新载入网页一次,在network中的name项中随便找一项然后便可以在Header中找到user-agent,获取该编码便可以完成伪装,实现访问,然后可以再加一个判断是否访问成功,同理也是判断status_code是否返回200,如果返回3或者4开头的数字则说明访问失败
def get_requests(url):
#伪装成浏览器去访问
headers ={"user-Agent":"此处为网页中查找到的编码"}
html=requests.get(url,headers=headers)
#判断对比服务器的状态码
if html.status_code == 200:
return html.text
else:
return None
3.使用lxml获取网页的信息以及解析,首先加载数据解析使用lxml中的etree来解析网页信息,然后在使用xpath解析需要的数据项名称,此时需要打开网页源码然后找寻相应的具体需要爬的标签名
def get_content_page(text):
#加载解析数据
html=etree.HTML(text)
#解析数据名称
name=html.xpath('//p[@class="name"]//text()')
star=html.xpath('//p[@class="star"]//text()')
time=html.xpath('//p[@class="releasetime"]//text()')
4.保存解析下的数据,此处使用全局变量index来统计爬虫爬取下来的数据量,打开新的TXT文件,然后将爬取下来的数据写入该文档。
global index
with open("电影口碑榜前十.txt",'a+',encoding='utf_8')as file:
for item in range(10):
file.write("排名第%s的"%index+
"电影名称:\t"+name[item].strip()+
"\t"+star[item].strip()+
"\t"+time[item].strip()+"\n"
)
print("排名第%s的"%index+
"电影名称:\t"+name[item].strip()+
"\t"+star[item].strip()+
"\t"+time[item].strip()+"\n"
)
index+=1
5.程序入口(写法有问题),此处遇到问题,原本的写法一直报错,后来删掉第一行才运行起来
删掉的第一行:
if _nam_ == '_maim_':
删除后的代码:
with open("电影口碑榜前十.txt",'w',encoding='utf_8')as file:
file.write("今日猫眼电影网中的前十电影资讯:"+"\n")
#请求网址
url="https://maoyan.com/board"
html = get_requests(url)
get_content_page(html)