在爬取需要获得cookie的网站中,我们首先要获得cookie,然后爬虫用浏览器的方式携带cookie访问网站
以下是示例代码
import requests
from lxml import etree
import json
def getData():
# 请求头
headers = {
"User-Agent": "Mozilla /5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
"Referer": "请求地址中请求头的字段",
}
# 请求cookie
cookits = {
"cookie": "登录后的的cookie值"
}
url = '请求地址'
response = requests.get(url, headers=headers, cookies=cookits)
# 实例化etree对象
html = etree.HTML(response.text)
# 建立一个字典。key做字段,value做列表
t_headers = {
"字段1": "",
"字段2": "",
"字段3": [],
"字段4": []
}
# 获取数据
value1 = html.xpath(f'xpath表达式')
value2 = html.xpath(f'xpath表达式')
value3 = html.xpath(f'xpath表达式')
value4 = html.xpath(f'xpath表达式')
# 添加进字典中的列表
t_headers["字段1"] = value1
t_headers["字段2"] = value2
t_headers["字段3"].append(value3)
t_headers["字段4"].append(value4)
# 字典转化为json返回json数据
return json.dumps(t_headers)
if __name__ == "__main__":
getData()
注意事项
- 在获取某些字段的时候可能会获取不到,这时候就要考虑请求的地址是否有误,获取的数据是否是源文件数据,因为有些页面是通过js渲染的,因此我们需要正确的填写请求地址
- 获取字段的方式多种多样,可以直接通过节点获取,也可以通过属性获取,不一定纠结于一种
遇到爬取需要换页的处理方法
可通过递归调用的方法来获取全部的数据
比如当前页为toPage,最多为totalPage,每页显示默认为最低条数
'''
pageNo: 当前页,一开始默认为1
totalPage: 最高页
data: 存储列表
getData(): 传两个参数,一个是当前页,一个是列表。返回列表
'''
def pageChange(pageNo,totalPage,data):
data = getData(pageNo,data) # 获取返回的数据
# 如果当前页小于最高页,则当前页+1并且继续调用pageChange()
if (pageNo<totalPage):
pageNo = pageNo + 1
pageChange(pageNo,totalPage,data)
# 返回全部数据
return data
方法多种多样,以上仅供参考,方便学习