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
解决方式: