• 爬虫---Beautiful Soup 通过添加不同的IP请求


      上一篇爬虫写了如何应付反爬的一些策略也简单的举了根据UA的例子,今天写一篇如何根据不同IP进行访问豆瓣网获取排行版

    requests添加IP代理

    如果使用代理的话可以通过requests中的方法proxies

    def request(method, url, **kwargs):
        """Constructs and sends a :class:`Request <Request>`.
        :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy.
    
    太多了,删除了一些留下了主要

    会有人问,这么多代理去哪里找?小编百度了找了一些发现西刺代理挺好用的。

    随便从里面找1个进行发请求

    # coding:utf-8
    import requests
    url ="http://httpbin.org/get"
    proxy = '117.191.11.73:80'
    proxies = {
        'http':'http://'+proxy,
        'https':'https://'+ proxy
               }
    r  =requests.get(url,proxies=proxies)
    print(r.text)
    
    
    代码结果:
    {
      "args": {}, 
      "headers": {
        "Accept": "*/*", 
        "Accept-Encoding": "gzip, deflate", 
        "Host": "httpbin.org", 
        "User-Agent": "python-requests/2.21.0", 
        "X-Via": "Cache-363"
      }, 
      "origin": "117.191.11.73, 117.191.11.73", 
      "url": "https://httpbin.org/get"
    }

    通过代理抓取豆瓣网

    1.通过requests请求地址:https://movie.douban.com/top250

    2.添加代理IP

    3.通过Beautiful Soup获取Html页面

    4.进行分析Html页面,完成对导演,电影名称,评分的抓取

     代码结果:

    import requests
    from  bs4 import BeautifulSoup
    import re
    # 请求头
    headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit'
                  '/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400'
    }
    # 添加代理
    proxies = {
    'http':'http://113.121.22.92:808',}
    r = requests.get(url,headers=headers,proxies=proxies)
    html = r.content.decode('utf-8')
    blog = BeautifulSoup(html,'html.parser')
    daoyan = blog.find_all('p',class_='')   # 导演
    titles  = blog.find_all('div',class_='hd')    # 电影名称
    pingfen = blog.find_all('span',class_='rating_num')    # 评分
    for title,daoya, pingfe in zip(titles,daoyan,pingfen):
        m = title.get_text().split('
    ')[2]
        x = daoya.get_text().strip()
        x1 = re.findall(r'导演: (.*?)xa0',x)
        cc = pingfe.get_text()
        print(m)
        print(x1)
        print(cc)    

    代码执行完后发现只抓取了第一页的数据,而我们想要的时候全部数据,那么我们就继续分析URL路径

    # 第一页的URL地址
    https://movie.douban.com/top250
    
    # 第二页的URL地址
    https://movie.douban.com/top250?start=25&filter=
    
    # 第三页的URL地址
    https://movie.douban.com/top250?start=50&filter=

    经过观察我们可以发现后面唯一变得数据就是start,那么我们可以通过拼接URL获取全部数据,并且把这么数据写入到TXT文件中

    import requests
    from  bs4 import BeautifulSoup
    import re
    page = 0
    base_url = 'https://movie.douban.com/top250?start='
    # 通过循环拼接URL
    while page<10:
        url = base_url + str(25*page)
        page += 1
    # 请求头
        headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
    '/Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400
    ' } # IP代理 proxies = { 'http':'http://113.121.22.92:808',} r = requests.get(url,headers=headers,proxies=proxies) html = r.content.decode('utf-8') blog = BeautifulSoup(html,'html.parser') daoyan = blog.find_all('p',class_='') # 导演 titles = blog.find_all('div',class_='hd') # 电影名称 pingfen = blog.find_all('span',class_='rating_num') # 评分 for title,daoya, pingfe in zip(titles,daoyan,pingfen): m = title.get_text().split(' ')[2] x = daoya.get_text().strip() x1 = re.findall(r'导演: (.*?)xa0',x) cc = pingfe.get_text() # 写入到txt文件中 with open('123.txt','a+',encoding='utf-8')as f : f.write('{m} {x1} {cc} '.format(m=m,x1=x1,cc=cc))

    通过查看TXT文件,发现已经成功的获取到了豆瓣网的电影信息。

    这个案例只是简单的表达我们可以通过IP代理的方式进行来完成爬虫(当然不用代理一样可以请求成功,只是简单的表达下思想,思想学会了,其他的都是简单的问题了)

    以后我们如果遇到了封IP的网站都可以通过添加IP代理的方式进行爬取数据;

    如果感觉安静写的内容对你有帮助,请点击个关注,内容持续更新中~~~~~

  • 相关阅读:
    Windows开发,关于通过写代码加载PDB的那些事
    从FreeBSD里面看到的网络协议列表,感觉可以保存一下
    听了几段《双投唐》
    ReactOS 无法显示中文的问题
    ReactOS 代码更新后的编译安装
    都什么年代了,怎么还那种德行
    假冒不伪劣
    ollvm 使用——“Cannot open /dev/random”错误的解决方法
    ollvm 编译
    C/C++ 吐槽第一期:你最讨厌的C/C++里面的数据类型是什么
  • 原文地址:https://www.cnblogs.com/qican/p/11177845.html
Copyright © 2020-2023  润新知