爬虫主要通过requests.get(url,params,headers,datas)来获取页面信息,再通过数据解析来捕获自己所需要的信息,其中headers需要添加‘User-Agent’来实现伪装。
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3722.400 QQBrowser/10.5.3776.400', # 伪装成浏览器
'Referer': 'http://jwch.xxx.edu.cn/' # 设置父页面,防止被拦截
}
"""请求方式"""
session = requests.Session() # 设置session保存,可进入需登录的页面
response = session.post(url=login_url, headers=headers, data=data) # 进行登录请求
#print(response.status_code) # 测试是否登陆成功,200为成功
login_page_text = response.text # 获取登录后返回信息
id = re.findall("id=(\d*)", login_page_text)[0] # 通过正则提取登录后数据地址
detail_url = 'http://xx.xx.xxx.xx/right.aspx?id='+id # 再次进行请求
detail_page_text = session.get(url=detail_url, headers=headers).text # 获取所需要的文本(未提取)
数据解析是获取所需要的信息,可使用正则表达式、xpath、bs4之类的方法来实现
在本次的作业中主要使用的是xpath的方法,在一些通过xpath方法难以实现的地方可以选择改为使用正则表达式来解决。
# 使用xpath对目标信息进行解析提取
tree = etree.HTML(detail_page_text)
lesson = tree.xpath('//span[@id="LB_kb"]/table//tr') # 得到了目标信息
爬取部分动态的信息例如阅读量时,直接对页面进行请求,页面信息因需要进行ajax才能对模板进行渲染,所以无法得到数据。模拟浏览器发送ajax请求才能将数据补充完整。