下面是详细讲解“零基础写python爬虫之使用Scrapy框架编写爬虫”的完整攻略:
一、Scrapy框架介绍
Scrapy是一个支持Python 2 & 3的快速、高效的web爬虫框架。通过它,用户可以简单地更改参数来创建新的spider(爬虫)。Scrapy框架具备高度的reusability和灵活性。
二、Scrapy框架的安装
Scrapy安装不再赘述,可以去官网查看。在安装完Scrapy之后,还需要安装其依赖的库:
pip install service_identity
三、Scrapy爬虫编写
下面我们以一个简单的小例子讲解如何编写一个Scrapy爬虫,获取百度搜索结果的标题。
Step 1 创建Scrapy项目
scrapy startproject baidu_search
cd baidu_search
这里我们创建了一个名为baidu_search
的Scrapy项目,并且进入该项目目录。
Step 2 创建Spider
scrapy genspider baidu www.baidu.com
这里我们使用scrapy genspider
命令生成了一个名为baidu
的Spider,爬取的网站是www.baidu.com。该命令会在Spiders目录下生成一个名为baidu.py
的文件,该文件包含了一个名为BaiduSpider
的类,我们可以在该类中编写爬虫代码。
下面是BaiduSpider
类的一个简单示例,用于获取百度搜索结果的标题:
import scrapy
class BaiduSpider(scrapy.Spider):
name = 'baidu'
start_urls = ['https://www.baidu.com/s?wd=python']
def parse(self, response):
for selector in response.css('.result .c-title a'):
yield {
'title': selector.css('::text').get(),
}
在上述代码中,我们新建了一个BaiduSpider
类,继承自scrapy.Spider
,并指定了该Spider的名字为baidu
。start_urls
定义了该Spider的起始url。
在parse
方法中,我们使用了CSS选择器来提取每个搜索结果的标题,并使用yield关键字返回结果。保存结果的格式可以自行定义。
Step 3 运行Spider
在完成Spider的编写之后,我们可以使用以下命令来运行Spider:
scrapy crawl baidu -o python_titles.json
在上述命令中,baidu
是我们之前指定的Spider名字,python_titles.json
是保存结果的文件名。
运行完成之后,我们就可以在当前目录下看到一个叫做python_titles.json
的文件,其中保存了百度搜索结果的标题。
四、另一个示例
除了上述示例,我们在这里介绍另一个Scrapy爬虫的示例,用于爬取豆瓣Top250电影信息。
Step 1 创建Scrapy项目
同样地,我们可以使用以下命令创建一个名为douban_top250
的Scrapy项目:
scrapy startproject douban_top250
cd douban_top250
Step 2 创建Spider
我们可以使用scrapy genspider
命令在我们的项目中生成一个Spider:
scrapy genspider douban_top250_spider movie.douban.com
这里我们使用了movie.douban.com
作为起始url,我们可以在该网站上面爬取Top250电影信息。
在生成的douban_top250_spider.py
文件中,我们可以编写以下代码:
import scrapy
class DoubanTop250Spider(scrapy.Spider):
name = "douban"
start_urls = [
'https://movie.douban.com/top250'
]
def parse(self, response):
for movie in response.css('div.info'):
yield {
'title': movie.css('span.title::text').get(),
'score': movie.css('span.rating_num::text').get(),
'rating': movie.css('span.inq::text').get()
}
next_page = response.css('span.next a::attr(href)').get()
if next_page is not None:
next_page = response.urljoin(next_page)
yield scrapy.Request(next_page, callback=self.parse)
在上述代码中,我们使用了CSS选择器来提取每个电影的标题、评分和评价等信息。同时,我们通过response.css('span.next a::attr(href)').get()
来提取下一页的url,用于继续爬取豆瓣Top250电影信息。
Step 3 运行Spider
在编写完成我们的Spider之后,我们可以使用以下命令来运行Spider:
scrapy crawl douban -o douban_top250.json
在上述命令中,douban
是我们之前指定的Spider名字,douban_top250.json
是保存结果的文件名。
运行完成后,我们就可以在当前目录下看到一个叫做douban_top250.json
的文件,其中保存了豆瓣Top250电影的信息。
五、总结
通过上述示例,我们可以看到,使用Scrapy框架编写爬虫,可以大大简化我们的爬虫代码编写过程。同时,Scrapy也提供了各种强大的工具,例如中间件、管道等,能够更好地定制和管理我们的爬虫。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:零基础写python爬虫之使用Scrapy框架编写爬虫 - Python技术站