爬虫 - Scrapy框架安装使用2
1.爬虫 - Scrapy框架安装使用12.数据库 - MongoDB基础语法23.数据库 - MongoDB基础知识14.数据库 - MongoDB安装5.文档数据存储
6.爬虫 - Scrapy框架安装使用2
7.数据库 - MySql语句8.爬虫 - 基础类总集9.K8S安装流程10.Docker简介安装11.Docker常用命令12.Docker容器数据卷13.DockerFile14.爬虫 - Request库简介15.爬虫 - Selenium简介16.Python处理Word,Excel,PDF17.数据分析 - 理论简介18.数据分析 - NumPy模块19.数据分析 - Pandas模块20.数据分析 - Matplotlib模块21.爬虫 - 网页解析库22.Android自动化 - 环境准备23.Android自动化 - 基础总集24.Python一些简单基础的模板化语法Scrapy 框架其他方法功能集合笔记
使用Scrapy框架自带Item Pipeline下载文件和图片
使用ImagesPipeline 下载图片
1、 要下载Pillow 否则无法下载
2、item需要定义两个默认的,不能改!否则无法下载!
image_urls = scrapy.Field() ### 存储下载图片的链,需要传递一个列表
images = scrapy.Field() ###文件下载完成后,会把图片的相关信息存储到这个属性里,比如 下载的路径、下载的URL、文件的校验码 …
settings.py
### 开启ImagePipline
ITEM_PIPELINES = {
'scrapy.pipelines.images.ImagesPipeline': 1,
}
###图片下载存储路径
IMAGES_STORE = 'img'
import scrapy
from ScrapyProject.items import GiftItem
from bs4 import BeautifulSoup
import json
class GiftsSpider(scrapy.Spider):
name = "gifts"
allowed_domains = ["www.hellorf.com"]
start_urls = ["http://www.hellorf.com/"]
def parse(self, response):
item = GiftItem ()
soup = BeautifulSoup(response.text, 'lxml')
res = soup.find(id="__NEXT_DATA__").text
URL = []
res1 = json.loads(res)
res2 = res1["props"]["pageProps"]["initialProps"]
image_list = res2["KVS"]
for i in image_list:
URL.append(i.get('image'))
cover_list = res2["inventions"]
for i in cover_list:
URL.append(i.get('cover'))
res3 = res2["inspirationAtlas"]
for i in res3:
if i.get('topics'):
topics_list = i.get('topics')
for topic in topics_list:
URL.append(topic.get("short_cover"))
item['image_urls'] = URL
yield item
使用 FilesPipeline 下载文件
1、item需要定义两个默认的,不能改!
file_urls = scrapy.Field()
files = scrapy.Field()
settings.py
### 开启FilePipline
ITEM_PIPELINES = {
'scrapy.pipelines.files.FilesPipeline': 1,
}
###图片下载存储路径
FILES_STORE = 'img'
使用LinkExtractor提取链接
使用Selector
import scrapy
from bs4 import BeautifulSoup
class BookSpider(scrapy.Spider):
name = "book"
allowed_domains = ["books.toscrape.com"]
start_urls = ["http://books.toscrape.com/"]
def parse(self, response):
soup = BeautifulSoup(response.text,'lxml')
urls = soup.find_all(class_="col-xs-6 col-sm-4 col-md-3 col-lg-3")
for i in urls:
### 提取链接,得到没有域名的路径,如图一所示
url = i.find(class_="image_container").a.attrs.get('href')
print(url)
### 使用response.urljoin方法计算出绝对url地址,如图二所示
URL = response.urljoin(url)
print(URL)
使用LinkExtractor
import scrapy
from scrapy.linkextractors import LinkExtractor
from bs4 import BeautifulSoup
class BookSpider(scrapy.Spider):
name = "book"
allowed_domains = ["books.toscrape.com"]
start_urls = ["http://books.toscrape.com/"]
def parse(self, response):
soup = BeautifulSoup(response.text,'lxml')
urls = soup.find_all(class_="col-xs-6 col-sm-4 col-md-3 col-lg-3")
for i in urls:
### 提取链接
url = i.find(class_="image_container").a.attrs.get('href')
### 创建一个LinkExtractor对象,使用一个或多个构造器参数描述提取规则
### 如图一所示
links = LinkExtractor(url)
### 调用LinkExtractor对象的extract_links方法传入一个Response对象,该方法依据创建对象时所描述的提取规则,
### 在Response对象所包含的页面中提取链接,最终返回一个列表,其中的每一个元素都是一个Link对象,即提取到的一个链接
### 如图二所示
Link = links.extract_links(response)
### 得到最终链接
### 如图三所示
print(Link[0].url)
使用Exporter导出数据
1、 在Scrapy中,负责导出数据的组件被称为Exporter(导出器)
2、 Scrapy内部实现了多个Exporter,每个Exporter实现一种数据格式的导出
3、 parse方法需要返回列表套字典
使用命令行参数指定
import scrapy
from bs4 import BeautifulSoup
class BookSpider(scrapy.Spider):
name = "book"
allowed_domains = ["books.toscrape.com"]
start_urls = ["http://books.toscrape.com/"]
def parse(self, response):
booklist=[]
soup = BeautifulSoup(response.text,'lxml')
book_list = soup.find_all(class_="col-xs-6 col-sm-4 col-md-3 col-lg-3")
for book in book_list:
name = book.article.h3.a['title']
price = book.find(class_="price_color").text
booklist.append({'书名':name,'价格':price})
### 返回列表套字典
return booklist
1、 -o 指定导出路径
2、 -t 指定导出文件类型,一般可以不写,scrapy爬虫可以通过文件后缀判断导出类型
### 终端执行命令如下:
scrapy crawl book -o b.csv
结果如下:
Scrapy框架中配置ip代理
可以先看下依赖库安装没有
pip install scrapy-proxies
设置单个代理ip
setttings
DOWNLOADER_MIDDLEWARES = {
### 项目名.middlewares名称(也可以自定义).类名
'Film.mymiddlewares.HttpProxyMiddleware': 700,
}
### 设置代理服务器,格式为:http://user:password@host:port
HTTP_PROXY = 'http://121.40.62.167:3128'
mymiddlewares
from scrapy import signals
class HttpProxyMiddleware:
def __init__(self, proxy):
self.proxy = proxy
@classmethod
def from_crawler(cls, crawler):
# 从Scrapy的配置中读取代理IP
return cls(proxy=crawler.settings.get('HTTP_PROXY'))
def process_request(self, request, spider):
# 设置代理
request.meta['proxy'] = self.proxy
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性