
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出。欢迎各位前来交流。(部分材料来源网络,若有侵权,立即删除)
本人博客所有文章纯属学习之用,不涉及商业利益。不合适引用,自当删除!
若被用于非法行为,与我本人无关
- 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条)