爬虫-之反爬,随机代理IP、限流器、伪造用户代理头等

本文深入探讨了爬虫在面对反爬虫措施时如何应对,包括使用随机代理IP池来隐藏真实身份,设置限流器避免过于频繁的请求,以及通过伪造用户代理头模拟不同浏览器行为,以提高爬虫的生存能力。
摘要由CSDN通过智能技术生成
from bs4 import BeautifulSoup
import requests

import requests
# 伪造用户代理头
from fake_useragent import UserAgent
# 重试下载
from retrying import retry
# 实现信息摘要算法 md5 sha
import hashlib
# 队列
import queue
import re
# 解析网站robots.txt文件
from urllib import robotparser
# 解析url的
from urllib.parse import urlparse, urljoin, urldefrag
# 多线程
from threading import Thread
from datetime import datetime
import time
# 数据库缓存
from day02 import mongo_cache

# 定义爬虫爬取的深度

MAX_DEP = 2


def get_robots(url):
    '''
    解析robots.txt文件
    :param url:
    :return:
    '''
    rp = robotparser.RobotFileParser()
    rp.set_url(urljoin(url, 'robots.txt'))
    rp.read()
    return rp


def save_url(html_content, url_str):
    '''
    存储下载内容
    :param html_content:
    :param url_str:
    :return:
    '''
    md5 = hashlib.md5()
    md5.update(html_content)
    # file_path = "./download/" + md5.hexdigest()+ ".html"
    file_path = "./download/" + gen_html_name(url_str)+ ".html"

    with open(file_path,'wb') as f:
        f.write(html_content)


def gen_html_name(url_str):
    '''
    去除/
    :param url_str:
    :return:
    '''
    path = urlparse(url_str).path # 解析域名
    path_array = path.split('/')
    return path_array[len(path_array) - 1]



def extractor_url_lists(html_content):
    '''
    抽取网页中的其他链接
    :param html_content:
    :return:
    '''
    url_regex = re.compile('<a[^>]+href=["\'](.*?)["\']', re.IGNORECASE)
    return url_regex.findall(html_content)


# 爬取代理IP
def get_ip_list(url, headers):
    web_data = requests.get(url, headers=headers)
    soup = BeautifulSoup(web_data.text, 'lxml')
    ips = soup.find_all('tr')
    ip_list = []
    for i in range(1, len(ips)):
        ip_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值