Python网络爬虫五

浏览: 1403

作者:我为峰2014

链接:https://www.jianshu.com/p/8b19019b74aa

來源:简书

前言

我们看了一些,爬虫示例,对爬虫应该有比较深的理解了,

还是爬取评论,这次选择B站

点开B站,打开F12,点击评论,看ajax,观察规律,找到url

找到url,很容易

https://api.bilibili.com/x/v2/reply?callback=jQuery17205163997735669639_1515469704917&jsonp=jsonp&pn=2&type=1&oid=12009509&sort=0&_=1515471170772

多抓取几次,相互比较,得出规律,然后对url缩减
https://api.bilibili.com/x/v2/reply?jsonp=jsonp&pn=2&type=1&oid=12009509&sort=0

然后测试返回的类型,是src,我们转为dict,根据key=value获得我们需要的数据

代码

import requests

#获取评论
for page in range(10):#评论的页数
url = 'https://api.bilibili.com/x/v2/reply?jsonp=jsonp&pn={page}&type=1&oid=12009509&sort=0'.format(page=page)
resp = requests.get(url)
data = resp.json()
comment_list = data['data']['replies']
for com in comment_list:
comment = com['content']['message']
print(comment)

大概思路就是这样的,具体细节,自己完善。

爬虫之魂

我们都知道,用机器去爬取信息和人为的浏览信息是有很大的不同的。所以,网站也会经常封锁我们的爬虫,对此,我们常用的策略是伪装成浏览器,降低访问频率,让爬虫的行为更像人为的浏览。当然如果只是伪装成浏览器,降低了你的访问速度,网站仍然会封锁你的爬虫。让你访问受限,比如,访问十次该网址,就封锁,导致出错,但是,过一段时间,我们重新运行程序又可以爬取数据了。所以,为了减少麻烦,我们可以设置策略:

当我们知道自己的爬虫被封锁了以后,降低访问频率,但是还是要一直发送请求,锲而不舍,直到又可以爬取为止。坚持就是胜利。

伪装成浏览器

import requests

def scraper(url):
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}

cookies = {'Cookie':'你的cookies'}

resp = requests.get(url,headers,cookies)
"""省略。。。解析网页"""
"""省略。。。保存数据"""


#待爬urls
urls = [...]

for url in urls:
scraper(url)

降低访问频率

import requests
import time

def scraper(url):
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}

cookies = {'Cookie':'你的cookies'}

resp = requests.get(url,headers,cookies)
"""省略。。。解析网页"""
"""省略。。。保存数据"""


#待爬urls
urls = [...]
for url in urls:
scraper(url)
time.sleep(1)

锲而不舍

import requests
import time

def scraper(url):
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}

cookies = {'Cookie':'你的cookies'}

resp = requests.get(url,headers,cookies)
"""省略。。。解析网页"""
"""省略。。。保存数据"""


#拥有锲而不舍精神的爬虫(slow but steady)
def scraper_with_perseverance(url):
Flag = True
while Flag:
try:
#正常爬取,爬取成功后退出循环
scraper(url)
Flag = False
except:
#被网站封锁后,降低访问频率,但仍坚持重复访问,
#直到爬取到该url的数据,退出本url的爬虫
Flag = True
time.sleep(5)
#待爬urls
urls = [...]

for url in urls:
scraper_with_perseverance(url)
time.sleep(1)

tips
如果爬的还是太多,建议使用代理IP

推荐
fake-useragent库,可以伪装生成headers请求头中的User Agent值

安装pip install fake-useragent

使用功能random方法

爬虫中使用

from fake_useragent import UserAgent
import requests
ua = UserAgent()
headers = {'User-Agent': ua.random}

url = '待爬取的url'
resp = requests.get(url,headers=headers)
推荐 0
本文由 Python爱好者社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册