Python用requests库爬取返回为空的解决办法
首先介紹一下我們用360搜索派取城市排名前20。
我们爬取的网址:https://baike.so.com/doc/24368318-25185095.html
我们要爬取的内容:
html字段:
robots协议:
现在我们开始用pythonIDLE爬取
importrequests r=requests.get("https://baike.so.com/doc/24368318-25185095.html") r.status_code r.text
结果分析,我们可以成功访问到该网页,但是得不到网页的结果。被360搜索识别,我们将headers修改。
importrequests headers={ 'Cookie':'OCSSID=4df0bjva6j7ejussu8al3eqo03', 'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36' '(KHTML,likeGecko)Chrome/68.0.3440.106Safari/537.36', } r=requests.get("https://baike.so.com/doc/24368318-25185095.html",headers=headers) r.status_code r.text
接着我们对需要的内容进行爬取,用(.find)方法找到我们内容位置,用(.children)下行遍历的方法对内容进行爬取,用(isinstance)方法对内容进行筛选:
importrequests frombs4importBeautifulSoup importbs4 headers={ 'Cookie':'OCSSID=4df0bjva6j7ejussu8al3eqo03', 'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36' '(KHTML,likeGecko)Chrome/68.0.3440.106Safari/537.36', } r=requests.get("https://baike.so.com/doc/24368318-25185095.html",headers=headers) r.status_code r.encoding=r.apparent_encoding soup=BeautifulSoup(r.text,"html.parser") fortrinsoup.find('tbody').children: ifisinstance(tr,bs4.element.Tag): tds=tr('td') print([tds[0].string,tds[1].string,tds[2].string])
得到结果如下:
修改输出的数目,我们用Clist列表来存取所有城市的排名,将前20个输出代码如下:
importrequests frombs4importBeautifulSoup importbs4 Clist=list()#存所有城市的列表 headers={ 'Cookie':'OCSSID=4df0bjva6j7ejussu8al3eqo03', 'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36' '(KHTML,likeGecko)Chrome/68.0.3440.106Safari/537.36', } r=requests.get("https://baike.so.com/doc/24368318-25185095.html",headers=headers) r.encoding=r.apparent_encoding#将html的编码解码为utf-8格式 soup=BeautifulSoup(r.text,"html.parser")#重新排版 fortrinsoup.find('tbody').children:#将tbody标签的子列全部读取 ifisinstance(tr,bs4.element.Tag):#筛选tb列表,将有内容的筛选出啦 tds=tr('td') Clist.append([tds[0].string,tds[1].string,tds[2].string]) foriinrange(21): print(Clist[i])
最终结果:
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。