Scrapy是一个用Python编写的开源web爬虫框架。它能快速高效地从网站上提取数据,并可在多个网页和网站之间自由转换。
下面是如何使用Scrapy框架的详细攻略:
安装Scrapy
使用pip安装Scrapy框架:
pip install scrapy
创建新的Scrapy项目
在终端中使用如下命令,创建新的Scrapy项目:
scrapy startproject myproject
此命令将在当前目录中创建一个名为myproject的新目录,包含Scrapy项目的基本文件结构。
创建新的Spider
使用如下命令,在Scrapy项目中创建一个新的Spider:
scrapy genspider spider_name domain.com
其中,spider_name是Spider的名称,domain.com是Spider将要抓取数据的网站域名。
配置Spider
打开Spider所在的.py文件,并按照如下示例进行配置:
import scrapy
class MySpider(scrapy.Spider):
name = 'myspider'
start_urls = ['http://www.example.com']
def parse(self, response):
# 在这里编写解析获取数据的代码
其中,name属性指明了Spider名称,start_urls属性是一个列表,包含了Spider将要抓取数据的初始URL。在parse方法中,编写解析获取数据的代码。
解析数据
使用XPath或CSS选择器在网页上获取数据。
例如,在.items文件中定义你的数据项:
import scrapy
class MyItem(scrapy.Item):
title = scrapy.Field()
content = scrapy.Field()
然后,在parse方法中解析数据:
def parse(self, response):
for post in response.xpath('//div[@class="post"]'):
item = MyItem()
item['title'] = post.xpath('a/@title').extract_first()
item['content'] = post.xpath('p/text()').extract_first()
yield item
以上示例代码会在每个需要获取数据的元素中创建MyItem实例,并将title和content字段值分别赋值为元素中的标题和内容。
运行Spider
使用如下命令,运行Spider:
scrapy crawl spider_name
其中,spider_name为待运行的Spider的名称。
至此,你已经成功的创建、配置、解析数据、并成功的运行了Scrapy框架。
下面提供两个Scrapy爬虫的示例:
Scrapy爬取知乎热榜
创建一个爬取知乎热门话题的爬虫:
import scrapy
import json
class ZhihuSpider(scrapy.Spider):
name = 'zhihu'
headers = {
'accept': 'application/json, text/plain, */*',
'referer': 'https://www.zhihu.com/explore',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
'authorization': 'oauth c3cef7c66a1843f8b3a9e6a1e3160e20',
}
api = 'https://www.zhihu.com/api/v3/feed/topstory/hot-lists/%3Fdesktop=true'
def start_requests(self):
yield scrapy.Request(url=self.api, headers=self.headers, callback=self.parse)
def parse(self, response):
result = json.loads(response.body.decode('utf-8'))
for item in result.get('data'):
yield {
'title': item.get('target').get('title'),
'url': item.get('target').get('url'),
'excerpt': item.get('target').get('excerpt')
}
在这个爬虫中,我们发送一个带有授权头的请求到知乎热榜上,获取最热门的话题列表并解析出他们的标题、连接和描述。
运行以下命令启动爬虫:
scrapy crawl zhihu
Scrapy爬取豆瓣电影
创建一个爬取豆瓣电影Top250的爬虫:
import scrapy
from douban.items import DoubanItem
class DoubanSpider(scrapy.Spider):
name = "douban"
allowed_domains = ["douban.com"]
start_urls = [
"http://movie.douban.com/top250"
]
def parse(self, response):
for sel in response.xpath('//div[@class="info"]'):
item = DoubanItem()
item['rank'] = sel.xpath('div[@class="pic"]/em/text()').extract_first()
item['title'] = sel.xpath('div[@class="hd"]/a/span[@class="title"]/text()').extract_first()
item['rating_num'] = sel.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract_first()
item['quote'] = sel.xpath('div[@class="bd"]/p[@class="quote"]/span/text()').extract_first()
item['url'] = sel.xpath('div[@class="hd"]/a/@href').extract_first()
yield item
next_page = response.xpath('//span[@class="next"]/a/@href')
if next_page:
url = response.urljoin(next_page[0].extract())
yield scrapy.Request(url, self.parse)
在这个爬虫中,我们首先向豆瓣电影Top250发送一个请求并解析该页面。随后,我们将遍历该页面的所有电影,并解析每部电影的排名、标题、评分、引用和URL。最后,我们查找下一页的链接并通过递归调用parse方法抓取下一页的电影。
运行以下命令启动爬虫:
scrapy crawl douban
以上是如何使用Scrapy框架的详细攻略,希望有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用Scrapy框架? - Python技术站