网页数据抓取怎么写(Python从入门到进阶共10本电子书今日鸡汤荷笠带斜阳)
优采云 发布时间: 2022-02-01 13:33网页数据抓取怎么写(Python从入门到进阶共10本电子书今日鸡汤荷笠带斜阳)
下次点击上方“Python爬虫与数据挖掘”关注
回复“书籍”获取Python从入门到进阶共10本电子书
这
日
小鸡
汤
合力带来落日余晖,青山遥遥。
大家好,我是一名高级Python初学者。
前言
前几天,白金群里一位名叫【Amy】的粉丝问了一个关于Python网络爬虫的问题,如下图所示。
不得不说,这位粉丝的提问很详细,很用心。我给他竖起大拇指。如果以后每个人都可以提出这样的问题,那将节省大量的沟通时间和成本。
事实上,他抓到的网站就是艾七叉,类似于七叉叉。其实上一次【杯酒】已经针对这个问题给出了新的解决方案。有兴趣的朋友可以去:分享一个实用的爬虫经验,今天继续给大家[有点意思]老大的解决方案。计划。
一、想法
很多网站都有反向请求。这个时候,一般有两种选择。要么找到js接口,要么使用requests_html等其他工具。在这里他使用了后者的 requests_html 工具。
二、分析
一开始我是直接用requests来发出请求的。我发现我得到的响应数据是错误的,和源代码相差万里。然后我认为网站应该有反爬。我尝试添加一些 ua,但标题仍然不起作用,所以我想尝试使用 requests_html 工具。
三、代码
下面是这个爬虫的代码,欢迎大家试用。
# 作者:@有点意思
import re
import requests_html
def 抓取源码(url):
user_agent = requests_html.user_agent()
session = requests_html.HTMLSession()
headers = {
"cookie": "BAIDUID=D664B1FA319D687E8EE0F9E8D643780A:FG=1; BIDUPSID=D664B1FA319D687E8EE0F9E8D643780A; PSTM=1620719199; __yjs_duid=1_c6692c2be6c2ffe04f29102282538ba81620719216498; BDUSS=dzdjlXdGsyTkhYdUFGeWFZOH40SmNWSkpDeUlPYS1UbU4xYklkYnFPY0Z5NTFoRVFBQUFBJCQAAAAAAAAAAAEAAAAmfcsXTUFPQlVDSEkyMDExAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU-dmEFPnZhWD; BDUSS_BFESS=dzdjlXdGsyTkhYdUFGeWFZOH40SmNWSkpDeUlPYS1UbU4xYklkYnFPY0Z5NTFoRVFBQUFBJCQAAAAAAAAAAAEAAAAmfcsXTUFPQlVDSEkyMDExAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU-dmEFPnZhWD; BAIDUID_BFESS=2C6304C3307DE9DB6DD487CC5C7C2DD3:FG=1; BDPPN=4464e3ebfa50be9e28b4d1c23e380603; _j54_6ae_=xlTM-TogKuTwIujX2VajREagog-ZV6RQfAmd; log_guid=0dad4e957fd92b3d86f994e0a93cee98; _j47_ka8_=57; __yjs_st=2_NzJkNjAyZjJmMmE1MTFmOTM1YWFlOWQwZWFlMjFkMTNmZDA0ZTlkNjRmNmUwM2NlZTQ4Y2Y4ZGM5ZjBjMDFlN2E0NzdiNDk4ZjdlNThmMmI4NjkxNDRjYmQ0MjZhMTZkMWYzMTBiYjUyMzJlMDdhMWQwZmQ2YjAwOWNiMTA5ZmJmNGNmNmE3OTk1ODZmZjkyMGQzZGZmNDdmZDJmZGU1MjE3MjgwMWRkNWYyMDlhNWNiYWM3YjNkMWI1MzU5NWM2MjEzYWMxODUyNDcyZDdjYTMzZDRiY2FlYTNmYmRiN2JkYzU1MWZiNWM3OT*敏*感*词*ZjExYmYwNGNlNTA5MjhjMWQ4Yl83XzEyZjk1ZDEw; Hm_lvt_ad52b306e1ae4557f5d3534cce8f8bbf=1637699929,1637713962,1637849108; Hm_lpvt_ad52b306e1ae4557f5d3534cce8f8bbf=1637849108; ab_sr=1.0.1_OTBkZjg4MzZjYjFhMWMyODgxZTM4MDZiNGViYTRkYjFhNDFiNWU1NWUyZjU4NDI3YjVjYTM1YTBiYTc1M2Y0ZTA5ZTI5YTZjNDQ4ZGFjMzE2NTU5ZTkwMWFkYWI0OGE5Nz*敏*感*词*MWFiOGU5N2VmNzJjMDdiYTk4NjYyY2E1NzQ4MzIzMDVmOTc2MDZjOTA0NTYyODNjNmUxNjAwNzlmNThlYQ==; _s53_d91_=93c39820170a0a5e748e1ac9ecc79371df45a908d7031a5e0e6df033fcc8068df8a85a45f59cb9faa0f164dd33ed0c72405da53b835d694f9513b3e1cb6e4a96799af3f84bd42f912f1c8ae0446a53f275*敏*感*词*e5a7894aeb6c9857d9df8629680517ba9801c04e1c714b46f860c3cbb2ecb1a3847388bf1b3*敏*感*词*bcbbd8119b62261a0a625c3c8b053758aa8fe29ec0f7fffe3b49bb0f77fea4df98a0f472d86bde82df374a7e5fb907b27d3187299c8b7ef65e28b9e042741e29587ab5829dfbafca8de50eb8162607986625ecd31d16a1f; _y18_s21_=4c8c0b95; RT=\"z=1&dm=baidu.com&si=nm8z611r2fr&ss=kwf1266k&sl=2&tt=xuh&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&ld=mmj&ul=ilwy\"",
"User-Agent": user_agent
}
r = session.get(url, headers=headers)
html = r.html.html
return html # 注意!这里抓取到的源码和手动打开的页面源码不一样
def 解密(列表): # unicode转化成汉字
print(列表)
return [eval(i) for i in 列表]
def 解析页面(html):
公司列表 = re.findall(r'titleName":(".*?")', html, re.DOTALL)
# 注意!此处编写正则时,要匹配的源码是函数“抓取源码”得到的html
# 此处正则匹配时一定要把引号带上!否则eval会报错!
return 解密(公司列表)
if __name__ == "__main__":
# 不用抓包,这里的url就是用户搜索时的页面
url = "https://某某查网站/s?q=%E4%B8%8A%E6%B5%B7%E5%99%A8%E6%A2%B0%E5%8E%82&t=0"
html = 抓取源码(url)
print(html)
公司列表 = 解析页面(html)
print(公司列表)
你可能会觉得奇怪,这里有中文的函数名和变量名。这是应原作者的要求,所以没有修改,但不影响程序的执行。
程序运行后,可以看到可以捕获目标字段。
四、总结
我是 Python 进阶者。本文基于粉丝提问,与大家分享一次实战爬虫体验,为大家带来一次有趣的爬虫体验。下次遇到使用requests库无法爬取的网页,或者看不到包的时候,不妨试试文中的requests_html方法,说不定会有用!
最后感谢【艾米】的提问,【【有点意思】】和【杯酒】解惑,感谢小编精心安排,感谢【盘溪鸟】积极尝试。
对于本文的网页,除了文章的“投机取巧”的方法外,用selenium爬取也是可行的,速度较慢,但能满足要求。小编认为肯定还有其他方法,也欢迎大家在评论区指教。
小伙伴们快来练习吧!如果你在学习过程中遇到任何问题,请加我为好友,我会拉你进入Python学习交流群一起讨论学习。
- - - - - - - - - -结尾 - - - - - - - - - -