首先我们来介绍下Scrapy框架和web爬虫的概念。Scrapy是Python语言下的一个高级网络爬虫框架,用于快速、高效的定义可重用的爬取方法,从网站上收集数据。
接下来我们来讲解下如何使用Scrapy框架编写web爬虫的简单示例。
安装Scrapy框架
首先,我们需要安装Scrapy框架。在命令行中输入以下命令:
pip install scrapy
若是使用conda环境,可以使用如下命令进行安装
conda install scrapy
创建Scrapy项目
安装完成后,我们可以使用以下命令创建一个新的Scrapy项目:
scrapy startproject project_name
其中,project_name为项目名称,可以自定义。执行完毕后,会在当前路径下创建一个名为project_name的文件夹,里面包含了一些与Scrapy相关的文件和文件夹。
添加爬虫
接着我们需要添加一个爬虫。在项目文件夹下执行以下命令:
cd project_name
scrapy genspider spider_name website_name
其中,spider_name为爬虫名称,可以自定义;website_name为将要爬取的网站的域名。执行完毕后,会在spiders文件夹下生成一个名为spider_name.py的文件。
爬虫解析
在爬虫文件中,我们需要自定义一些方法来定义如何从网站上获取所需的数据。例如,以下代码用于从指定网站上获取标题和描述:
import scrapy
class MySpider(scrapy.Spider):
name = "myspider"
start_urls = ["http://www.example.com"]
def parse(self, response):
for tag in response.css("html head meta"):
title = tag.css("meta[property='og:title']::attr(content)").get()
description = tag.css("meta[property='og:description']::attr(content)").get()
print("Title:", title)
print("Description:", description)
在上面的示例中,定义了一个MySpider类,继承自Scrapy的Spider类。其中,name属性为爬虫名称,start_urls属性为将要爬取的URL列表。在parse方法中,使用CSS选择器从网页上提取标题和描述信息,并通过print语句打印出来。
运行爬虫
最后,我们需要使用以下命令来运行我们编写的爬虫:
scrapy crawl spider_name
其中,spider_name为自定义的爬虫名称。执行完毕后,就可以在控制台看到所抓取到的数据。其他更详细的内容可以参考官方文档。
另外,以下是一个实际的例子,演示如何使用Scrapy框架爬取中国图书分类号列表:
import scrapy
class BookSpider(scrapy.Spider):
name = "book"
start_urls = ["http://www.nlc.cn/ztzl/yw/wdsj/index.htm"]
def parse(self, response):
for column in response.xpath("//div[@class='mainR']/div/a"):
href = column.xpath("@href").extract_first()
yield response.follow(href, self.parse_category)
def parse_category(self, response):
for row in response.xpath("//div[@class='bookC']/table/tr[position()>1]"):
code = row.xpath("td[1]/text()").extract_first()
name = row.xpath("td[2]/text()").extract_first()
yield {
"code": code.strip() if code else None,
"name": name.strip() if name else None,
}
上述代码中,我们定义了一个名为BookSpider的爬虫,用于从国家图书馆网站获取中国图书分类号列表。在parse方法中,我们遍历每个分类号的列,并使用response.follow方法跟踪每个分类号的链接,调用parse_category方法进行解析。在parse_category中,我们使用XPath选择器从表格行中提取分类号和分类名称,并通过yield语句返回一个Python字典。
另外,需要注意的是,由于该网站使用了反爬虫机制,需要在settings.py文件中添加如下配置:
USER_AGENT = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
DOWNLOAD_DELAY = 5
其中,USER_AGENT为用户代理(用于伪装浏览器),DOWNLOAD_DELAY为下载延迟(用于限制请求频率),可以根据实际情况进行调整。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python的Scrapy框架编写web爬虫的简单示例 - Python技术站