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_
爬虫-之反爬,随机代理IP、限流器、伪造用户代理头等
最新推荐文章于 2023-06-13 09:53:43 发布
本文深入探讨了爬虫在面对反爬虫措施时如何应对,包括使用随机代理IP池来隐藏真实身份,设置限流器避免过于频繁的请求,以及通过伪造用户代理头模拟不同浏览器行为,以提高爬虫的生存能力。
摘要由CSDN通过智能技术生成