当前位置:首页 > 开发语言 > 正文

scrapy框架爬虫 爬虫python

scrapy框架爬虫 爬虫python

各位老铁们,大家好,今天由我来为大家分享scrapy框架爬虫,以及爬虫python的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是...

各位老铁们,大家好,今天由我来为大家分享scrapy框架爬虫,以及爬虫python的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

用scrapy框架做爬虫,直接请求一个post接口的数据怎么写

scrapy.FormRequest(url=url,formdata=data,callback=self.parse)

想要用python做爬虫,是使用scrapy框架还是用requests、bs4等库

首先说下区别scrapy框架是一个完整的爬虫框架,内部使用twisted来实现大量HTTP请求的异步,并支持xpath数据解析。虽然功能强大,但是学习曲线略微偏高。requests库是简单的HTTP请求库,上手很快,但是要配合bs4进行数据解析。而requests要实现异步请求,还要配合gevent库或者是python的协程。这些都需要自己组合,拼装。总的来说,简单的爬虫用requests+bs4可以玩。如果是大量爬虫,要精细化设计的话,还是用scrapy较好。

scrapy爬虫框架入门实例

以下是一个简单的Scrapy爬虫框架入门实例,用于爬取豆瓣电影Top250的电影名称和评分:

创建Scrapy项目

在命令行中输入以下命令,创建一个名为douban的Scrapy项目:

scrapystartprojectdouban

创建Spider

在douban/spiders目录下创建一个名为douban_spider.py的文件,编写以下代码:

importscrapy

classDoubanSpider(scrapy.Spider):

name="douban"

start_urls=[

'https://movie.douban.com/top250'

]

defparse(self,response):

formovieinresponse.css('div.item'):

yield{

'title':movie.css('span.title::text').get(),

'rating':movie.css('span.rating_num::text').get()

}

next_page=response.css('span.nexta::attr(href)').get()

ifnext_pageisnotNone:

yieldresponse.follow(next_page,self.parse)

运行Spider

在命令行中进入douban目录,输入以下命令运行Spider:

scrapycrawldouban-omovies.csv

其中,-o参数指定输出文件的格式和路径,这里将结果保存为CSV文件。

4.查看结果

运行完毕后,在douban目录下会生成一个movies.csv文件,打开文件即可查看爬取到的电影名称和评分。

以上就是一个简单的Scrapy爬虫框架入门实例。需要注意的是,爬虫的编写需要遵守网站的爬虫规则,不得进行恶意爬取和攻击行为。

基于python的scrapy爬虫,关于增量爬取是怎么处理的

对于只是读取某几个网站更新内容的爬虫完全没必要在python代码中实现增量的功能,直接在item中增加Url字段。

item['Url']=response.url

然后在数据端把储存url的column设置成unique。

之后在python代码中捕获数据库commit时返回的异常,忽略掉或者转入log中都可以。

我使用的是SqlAlchemy。我是这么写的

fromsqlalchemy.excimportIntegrityError

classXxxPipeline(object):

defprocess_item(self,item,spider):

#一些session.add()

#........

try:

session.commit()

print'crawl%sdone!'%item['Url']

exceptIntegrityError:

print'skip%s.'%item['Url']

returnitem

虽然每次crawl都会重复抓取一些数据,但最终结果库内不会有相同的Url。

对于小规模的爬虫,这种重复抓取的成本基本可以忽略。

OK,本文到此结束,希望对大家有所帮助。

最新文章