汽车之家的反爬可以说是教科书级别,其反爬虫策略经过多次迭代,已经从最初的静态字体反爬变成了动态字体+js混淆,动态字体的破解与猫眼大同小异,加密的字多一些而已。js混淆比较麻烦,通过requests库请求网页无法得到字体对应的编码,看到的是一堆js函数,看着头都大了,不知道汽车之家是否对每一个加密的字都写了函数,无法洞悉其中的规则,那只能选择selenium获取网页了,效率比较低,但是很实用(小声bb:时间主要花在计算新旧字体的欧式距离上了,因为有90个字,不改进算法要执行差不多8000次)
动态字体映射
参考以前的文章
破解猫眼字体反爬
这里写一下如何建立基础字体映射,首先获取
Read more
一直以为微博的东西比较好搞,没想到还是有点坑。新浪把评论的模块保存在一个json字典里,真的是够了。。。前20页可以轻易爬取,21页以后需要获取前一页最后一个评论的ID以及已经展示的评论总数。
包和全局变量
#时间管理带师
import time
#网页请求
import requests
#解析网页
from bs4 import BeautifulSoup as bs
#统计已经展示的评论数量
num = 0
#请自行登录新浪获取cookie
cookie = {}
headers = {
'sec-fetch-dest':'empty
Read more
多spider
创建多个spider,需要为每个spider分配不同的管道(不要在settings.py中添加管道),首先在pipelines.py中定义不同的类,然后修改对应的py文件:
class PythonSpider(scrapy.Spider):
name = 'csdn'
allowed_domains = ['www.csdn.net']
start_urls = ['https://www.csdn.net/nav/python']
custom_settings = {
Read more
URL地址
urls = ['https://www.doutula.com/search?type=photo&more=1&keyword=%E6%80%BC%E4%BA%BA&page={}'.format(i + 1) for i in range(50)]
headers = {
'User-Agent':'Mozilla/5.0 (
Read more
#定义请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"}
#创建目标文件夹
if not os.path.ex
Read more
import
time
,
openpyxl
headers
=
{
'User-Agent'
:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
def
get_html
(
url
,
headers
):
r
=
requests
.
get
(
url
,
headers
=
headers
)
Read more