此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出。欢迎各位前来交流。(部分材料来源网络,若有侵权,立即删除)
本人博客所有文章纯属学习之用,不涉及商业利益。不合适引用,自当删除!
若被用于非法行为,与我本人无关
- Scrapy
- windows下scrapy安装
- pip
- pycharm setting
- anaconda下安装
- scrapy创建
- 豆瓣电影评论scrapy实战
- 代码
- 运行情况
- scrapy作为爬虫的框架可以说是方便了很多,至少不用手搓requests,从而模块化的进行爬虫开发。
- scrapy的模块展示图如下
- scrapy各个模块及作用如下。Spiders爬虫模块:构建起始请求并响应数据解析,主要为提取URL封装请求并且提取数据。Scheduler调度器模块:缓存请求并实现请求去重。Downloader下载器模块:发送请求, 获取响应数据,封装为Response。Item Pipeline管道模块:处理数据, 比如将数据保存在指定路径。ScrapyEngine引擎模块:作为运行过程的总指挥, 负责模块之间调度, 以及数据传递。Download Middlewares下载器中间件:在引擎和下载器之间, 可以对请求和响应数据进行处理, 比如: 实现随机代理IP, 随机User-Agent。爬虫中间件:爬虫和引擎之间,可以对请求和响应数据进行处理,比如过滤。
- Scrapy运转流程:
- 1)调度器从待下载链接中取出一个链接(URL);
- 2)调度器启动爬虫模块;
- 3)爬虫模块把URL传给下载器进行资源下载;
- 4)提取目标数据,抽取出目标对象,则交给实体管道进行进一步的处理;比如存入数据库、文本;
- 5)若是解析出的是链接(URL),则把URL插入到待爬取队列当中。
pip install scrapypycharm setting
- 直接进入setting
- 如何进入intepreter
- 搜索scrapy然后安装就好了
- 这边先创建一个新的anaconda环境
conda create -n environment_name python=X.X
- 创建成功后
conda activate environment
- 然后安装scrapy
conda install scrapyscrapy创建
- 在对应的环境下,进入了指定目录后
scrapy startproject projectname
- 然后进入爬虫目录
cd projectname
- 进入后创建爬虫
scrapy genspider baidu www.baidu.com
- 这边的baidu是爬虫类名,然后www.baidu.com是爬取目的url
- 这个url可以随意输入,后续可以在代码中改动
- 在对应的环境下,进入了指定目录后
scrapy startproject projectname
- 可以看到创建成功了
- 下一步创建爬虫
settings.py 是spdier项目的配置文件
这边我们需要改动一下robots协议并添加一下cookie请求
- 这个
- 还有这个
- 和这个
spider
import time import scrapy from bs4 import BeautifulSoup from ..items import DoubanConmentScrapyItem class SpiderSpider(scrapy.Spider): name = 'spider' allowed_domains = ['www.douban.com'] def start_requests(self): URL = [] for i in range(0,2): urls ='https://movie.douban.com/subject/3742360/comments?start={}&limit=20&status=P&sort=new_score'.format(i*20) URL.append(urls) for url in URL: time.sleep(2) yield scrapy.Request(url=url,callback=self.parse) print('@@@@@@@@@@@@@@@@@@@') def parse(self, response): r=response.text soup = BeautifulSoup(r, 'lxml') all = soup.find_all('div', {'class': 'comment'}) i=0 for every in all: i=i+1 data = [] comment = every.find('span', {'class': 'short'}).text vote = every.find('span', {'class': 'votes vote-count'}).text info = every.find('span', {'class': 'comment-info'}) author = info.find('a').text score = info.find_all('span')[1]['class'][0][-2] times = info.find('span', {'class': 'comment-time'})['title'] item=DoubanConmentScrapyItem() item['com_comment'] = comment item['com_vote'] = vote item['com_author'] = author item['com_score'] =score item['com_times'] =times data.append(item) yield item
items.py
# Define here the models for your scraped items # # See documentation in: # https://docs.scrapy.org/en/latest/topics/items.html import scrapy class DoubanConmentScrapyItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() com_comment = scrapy.Field() com_vote = scrapy.Field() com_author = scrapy.Field() com_score = scrapy.Field() com_times = scrapy.Field()
pipe
import csv class DoubanConmentScrapyPipeline(object): def process_item(self, item, spider): data=[] result=[] with open("film.csv", "a", encoding="gb18030", newline="") as csvfile: writer = csv.writer(csvfile) for key in item: data.append(item[key]) result.append(data) writer.writerows(result) return item运行情况
可以看到爬取下来的豆瓣短评被保存在了csv中
拿下
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)