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()
 
             
           
             
                         
             
            
评论区