scrapy框架爬虫 爬虫python
- 开发语言
- 2023-09-03
- 78
各位老铁们,大家好,今天由我来为大家分享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,本文到此结束,希望对大家有所帮助。
本文链接:http://xinin56.com/kaifa/14808.html