python scrapy4——middlewaves

middlewaves




用ua随机请求头做案例

爬虫文件:——没有打开请求头

结果:

打开请求头下

结果:


使用虚假请求头:
方法一:将虚假请求头放在一个列表里面,然后random.choice()


需要打开下载中间器:

结果


多次请求:用到新的参数:dont_filter =True(不去重)


第二种方法:用fake_useragent import UserAgent
先创建一个UserAgent的对象——ua =UserAgent(),然后让useragent=ua.random




汽车之家爬取练习

图片地址需要补全


发现在网页源码中

翻页逻辑:
第一页:https://car.autohome.com.cn/photolist/series/42726/6612564.html#pvareaid=3454450
第二页:https://car.autohome.com.cn/photolist/series/3742/p2/
第三页:https://car.autohome.com.cn/photolist/series/3742/p3/
第一页可以修改为:https://car.autohome.com.cn/photolist/series/3742/p1/

找ui里的li


代码:
import scrapy
class CarSpider(scrapy.Spider):
name = 'car'
allowed_domains = ['car.autohome.com.cn']
## 修改start_urls
start_urls = ['https://car.autohome.com.cn/photolist/series/42726/6612564.html#pvareaid=3454450']
def parse(self, response):
# 找ul里的li
lis =response.xpath('.//ul[@id="imgList"]/li')
for li in lis:
item ={}
item['src'] =li.xpath('./a/img/@src').extract_first()
print(item)
结果

直接复制url到浏览器打开,少了的https会补全


item数据到管道后进行二进制图片保存——用urllib的urlretrieve

保存的图片名字用src__后面命名


指定保存路径

要动态添加路径用到os——为了防止将反斜杠\识别为特殊字符,要加上r’


os.path.dirname(file)返回的是这个文件前的所有路径


保存路径:
from urllib import request
import os
class ScrapycarPipeline:
def process_item(self, item, spider):
# 获取图片url地址:https://car2.autoimg.cn/cardfs/product/g1/M0B/7E/E5/240x180_0_q95_c42_autohomecar__ChsEj13XxISAMilCAAIIygqZ9W0856.jpg
src =item['src']
# 获取图片名字 用split(‘__’)来划分,要__后一个作为名字
img_name =item['src'].split('__')[1]
# 保存图片 urlretrieve(第一个参数是url地址,第二个参数是文件地址)
# 保存路径:C:\Users\Administrator\PycharmProjects\爬虫\scrapy汽车\images 只要在这个后面加上img_name就可以
# 路径名:C:\Users\Administrator\PycharmProjects\爬虫\scrapy汽车\images\img_name
# 动态添加路径 到了和images上级的路径再join到images,就可以过来这个路径了
# 我现在pipline的路径是这个:C:\Users\Administrator\PycharmProjects\爬虫\scrapy汽车\scrapycar\scrapycar\pipelines.py
# 两个dirname就可以到scrapy汽车这个路径,再加上images就可以到C:\Users\Administrator\PycharmProjects\爬虫\scrapy汽车\images
file_path =os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))),'images')
print(file_path)
# 所有这个urlretrieve第一个参数是地址,第二个是保存路径就放file_path 再加一个/和文件名
# 比如:C:\Users\Administrator\PycharmProjects\爬虫\scrapy汽车\images + / + csfdgfgf.jpg
request.urlretrieve(src,file_path +'/' + img_name)
return item

结果:


也可以在setting里设置好图片保存处(后期不能修改)
setting文件增加:

用item文件

爬虫程序:

setting文件再修改:

这样运行会报错——ValueError: Missing scheme in request url: h

解决方式:



本文介绍了Python Scrapy框架在爬虫项目中的应用,包括如何使用随机User-Agent请求网页,处理请求头,以及在汽车之家网站上爬取图片的实践。在爬取过程中,通过设置下载中间件实现请求头的动态变化,避免被服务器识别为机器人。同时,文章还展示了如何使用fake_useragent库生成随机User-Agent,并解析网页结构获取图片URL。最后,通过Scrapy管道保存图片,利用os库动态构建保存路径,成功保存了爬取的图片。
65万+

被折叠的 条评论
为什么被折叠?



