Python网络爬虫五

前言

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

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

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


Python网络爬虫五_第1张图片
image.png

找到url,很容易


Python网络爬虫五_第2张图片
image.png

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方法


Python网络爬虫五_第3张图片
image.png

爬虫中使用

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

url = '待爬取的url'
resp = requests.get(url,headers=headers)

你可能感兴趣的:(Python网络爬虫五)