以下是“零基础写python爬虫之使用Scrapy框架编写爬虫”的完整攻略:
一、前置知识
在学习使用Scrapy框架编写爬虫之前,需要具备一定的Python基础知识,同时也需要了解HTML、CSS和XPath等相关知识。
二、安装Scrapy
使用pip命令可方便地安装Scrapy框架,在命令行中输入以下命令:
pip install scrapy
三、创建Scrapy项目
在命令行中输入以下命令,即可创建一个Scrapy项目:
scrapy startproject projectname
其中,projectname
为你的项目名称。
四、创建Spider
在Scrapy框架中,Spider是爬虫的核心部分。使用以下命令,可以创建一个Spider:
scrapy genspider spidername domain
其中,spidername
为你的Spider名称,domain
为所要爬取的网站域名。
五、编写Spider
在创建好Spider之后,就可以开始编写代码了。以下是一个简单的示例:
import scrapy
class ExampleSpider(scrapy.Spider):
name = "example"
allowed_domains = ["example.com"]
start_urls = [
"http://www.example.com/",
]
def parse(self, response):
# 处理爬取到的数据
pass
在这个示例中,我们创建了一个名为ExampleSpider
的Spider,并指定了所要爬取的域名为example.com
。同时,我们也指定了爬虫的起始URL为http://www.example.com/
。在parse
方法中,我们可以编写处理爬取到的数据的代码。
六、编写Item Pipeline
通过编写Item Pipeline,我们可以方便地对爬取到的数据进行处理和保存。以下是一个示例:
class ExamplePipeline(object):
def process_item(self, item, spider):
# 处理Item
return item
在这个示例中,我们创建了一个名为ExamplePipeline
的Item Pipeline,并定义了process_item
方法。在这个方法中,我们可以编写对Item进行处理的代码。
七、运行Spider
在编写好Spider和Item Pipeline之后,我们就可以运行Spider,并获取所需数据了。在命令行中输入以下命令,即可运行Spider:
scrapy crawl spidername
其中,spidername
为你的Spider名称。
八、示例说明
这里提供两个示例,分别为爬取豆瓣电影Top250和爬取天气预报数据。
1. 爬取豆瓣电影Top250
爬取豆瓣电影Top250信息,包括电影名、导演、演员、评分等。
首先,需要在Spider中指定所要爬取的URL。在该示例中,我们指定了所有页面的URL格式为http://movie.douban.com/top250?start={}
,其中花括号内的数字为该页面的起始数字。然后,在parse
方法中,我们可以使用XPath或CSS Selector对页面进行解析,获取所需信息。
代码示例:
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class DoubanTop250Spider(CrawlSpider):
name = 'douban_top250'
allowed_domains = ['movie.douban.com']
start_urls = ['http://movie.douban.com/top250']
rules = (
Rule(LinkExtractor(allow=r'start=\d+'), callback='parse_item', follow=True),
)
def parse_item(self, response):
movies = response.css('.item')
for movie in movies:
yield {
'title': movie.css('.title::text').get(),
'director': movie.css('.info .bd p::text')[0].get().strip().split()[0],
'actors': [a.strip() for a in movie.css('.info .bd p::text')[0].get().strip().split()[1:]],
'star': movie.css('.rating_num::text').get(),
}
2. 爬取天气预报数据
爬取某个城市的天气预报数据,包括日期、天气状况、最高温度和最低温度。
首先,需要在Spider中指定所要爬取的URL。在该示例中,我们指定了爬取杭州市七天内的天气预报数据。然后,在parse
方法中,我们使用XPath对页面进行解析,获取所需信息。
代码示例:
import scrapy
class WeatherSpider(scrapy.Spider):
name = 'weather'
allowed_domains = ['tianqi.com']
start_urls = ['http://lishi.tianqi.com/hangzhou/202108.html']
def parse(self, response):
trs = response.xpath('//div[@class="tqtongji2"]/table/tr')[1:]
for tr in trs:
yield {
'date': tr.xpath('.//td[1]/a/text()').get(),
'weather': tr.xpath('.//td[2]/text()').get(),
'high_temperature': tr.xpath('.//td[3]/text()').get(),
'low_temperature': tr.xpath('.//td[4]/text()').get(),
}
至此,“零基础写python爬虫之使用Scrapy框架编写爬虫”的攻略已经介绍完毕。