" name="sm-site-verification"/>
侧边栏壁纸
博主头像
PySuper博主等级

千里之行,始于足下

  • 累计撰写 203 篇文章
  • 累计创建 14 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

爬虫中的随机请求头和代理IP

PySuper
2020-10-20 / 0 评论 / 0 点赞 / 9 阅读 / 3509 字
温馨提示:
所有牛逼的人都有一段苦逼的岁月。 但是你只要像SB一样去坚持,终将牛逼!!! ✊✊✊

User-Agent

随机列表

  • 从网上找一些UserAgent
  • 当到列表中,然后使用random返回一个就可以了

模块返回

  • 配合fake_useragent,直接返回一个随机UserAgent
from random import choice
from fake_useragent import UserAgent


def main_head():
    # 使用 random 中的 choice 方法,随机获取其中的一个 User-Agent
    head = {"User-Agent": choice(herders)}
    return head

def random_ua():
    ua = UserAgent()
    # ua.firefox    # 输出 firefox 中的一个随机的 useragent

    user_agent = {"User-Agent":str(ua.random)}
    return user_agent

main_head()
random_ua()

IP代理

如果在公司,最好是购买代理,但是我们自己处理的时候,从网上抓取一些代理测试就OK了。

  • 之前说过自己构建代理池的,也是我们自己从网上抓取IP
  • 这里就详细说下怎么抓取代理
  • 代理的网站是有很多的,和其他的对比,西刺反倒有些不稳定
  • 我们在保存代理之前,最好还是测试一下
import requests
from lxml import etree
from ua import random_ua


class XiCi():
    def __init__(self):
        self.base_url = "http://www.xicidaili.com/nn/{}"
        self.num = int(input("请输入抓取页数: "))
        self.header = random_ua()
        self.proxy = {"http": "122.193.244.238:9999"} # 可以使用

    def get_url_list(self):
        return [self.base_url.format(page) for page in range(1, self.num)]

    def get_html(self, url):
        response = requests.get(url, headers=self.header)  # proxies = self.proxy
        response.encoding = response.apparent_encoding
        if response.status_code == 200:
            return response.text
        print(response.status_code, "无法访问")

    def get_item(self, html):
        soup_html = etree.HTML(html)
        ip_list = soup_html.xpath("//*[@id='ip_list']/tr/td[2]")
        port_list = soup_html.xpath("//*[@id='ip_list']/tr/td[3]")
        # anonymous_list = soup_html.xpath("//*[@id='ip_list']/tbody/tr/td[5]") 匿名

        return ip_list, port_list

    def parse_items(self, ip_list, port_list):
        for ip, port in zip(ip_list, port_list):
            print(ip.text + ":" + port.text)
            # 在这里可以在判断当前这个ip使用情况,再有选择性的输出 ==> 随便访问一个网站

    def run(self):
        for url in self.get_url_list():
            html = self.get_html(url)
            ip_list, port_list = self.get_item(html)
            self.parse_items(ip_list, port_list)


if __name__ == '__main__':
    xi_ci = XiCi()
    xi_ci.run()


0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区