作者:禎冬魔_784 | 来源:互联网 | 2023-08-26 17:46
一、什么是网页的http请求?
Get请求:地址栏上明文显示了请求信息,即请求地址中带有符号 ? 的地址。请求速度快,但不安全
例如:
请求参数 wd 表示查询字段; pn表示页数,即pn=0 -->第一页 pn = 10 -->第二页
POST请求:请求地址中不带POST表单数据,加密传输,常用于账号登录,很安全,但和前者相比速度慢。
例如:
二、什么是http请求头
告诉请求地址服务器,客户端的配置情况
练习:爬取百度搜索结果的前十页信息
python 代码
def baidu(wd="Curious chen"):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
}
data_match = r"data-tools=[\'\"]{1}({(.*?)})[\'\"]"
s_match = r".*title.*?:[\'\"](.*?)[\'\"].*?url.*?:[\'\"](.{4,})[\'\"]\}"
for i in range(10):
pn = i * 10
response = requests.get("https://www.baidu.com/s?wd=" + wd + "&pn=" + str(pn), headers=headers)
datas = re.findall(data_match, response.text)
print("第" + str(i+1) + "页")
for s_json in datas:
s_json = re.sub(r'"', '"', s_json[0])
s_json = re.match(s_match, s_json)
print(" title:" + s_json.group(1), "url:", s_json.group(2))
if __name__ == "__main__":
query = "飞猪"
baidu(query)
运行结果:
三、静态网页和动态网页
静态网页:网页中的所有数据,都在源代码中,请求一次链接均可得到。
动态网页:部分数据须经js渲染,动态添加到网页中,一次请求得到的源代码中的动态数据会错误或是不存在。
实战:飞猪旅游网站一旅游点的所有动态数据
此旅游点的部分动态数据如下:
判断是动态数据的条件:源网页中数据不存在,或错误。
第一步:右键 -->查看源代码(或使用快捷键 Ctrl + U),打开源代码页。
第二步:使用快捷键 Ctrl + F 打开搜索栏
第三步:输入上述图片所述的动态数据,
如何请求,或者说找到这些动态数据
第一步:右键 --> 检查 (或快捷键 F12)打开浏览器后台工作栏
第二步:选择功能栏上的Network,然后选择ALL所有数据类型
第三步,Ctrl + F 打开全局搜索栏
第四步:刷新页面
比较重要的两个功能键
第五步:搜索
第六步:查看请求头,分析请求头需要加上哪些参数,GET的请求参数怎么获得
经分析:获得每一个景点的动态数据只需要改变GET请求 id 参数即可
headers = {
"Referer": referer,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"
" Chrome/74.0.3729.169 Safari/537.36"
}
response = requests.get(
"https://traveldetail.fliggy.com/async/queryItemDetailAjaxInfo.do?id="+str(id)+"&categoryType=7",
headers=headers)
请求头加上referer,user-agent参数即可
第七步:分析json数据,提取需要的动态数据