Scrapy教程:使用LinkExtractor提取网页中的链接并保存到数据库
Scrapy是一个Python编写的快速、高效的web爬虫框架,可以用于从网页中提取数据。LinkExtractor是Scrapy中的一个工具,用于从网页中提取链接。
使用LinkExtractor提取链接的步骤如下:
1.安装Scrapy
首先,需要安装Scrapy。可以使用 pip install scrapy 命令来安装Scrapy。
2.创建Scrapy项目
在命令行中,使用 scrapy startproject 命令创建一个新的Scrapy项目。例如,创建一个名为tutorial的项目,可以使用以下命令:
scrapy startproject tutorial
这将在当前目录下创建一个tutorial文件夹,其中包含了Scrapy项目的基本结构。
3.创建Spider
通过 scrapy genspider 命令创建一个新的Spider。Spider是Scrapy中的核心组件,用于定义如何从网页中提取数据。
例如,创建一个名为example的Spider,使用以下命令:
scrapy genspider example example.com
这将在tutorial/spiders文件夹下创建一个名为example的Python文件,其中包含了一个名为ExampleSpider的Spider类。
4.配置Spider
打开tutorial/spiders/example.py文件,可以看到ExampleSpider类。可以在该类中添加代码来配置Spider的行为。
一个常见的配置是设置start_urls属性,指定Scrapy从哪些网页开始爬取。例如,可以将start_urls设置为一个包含待爬取网页链接的列表,如下所示:
start_urls = ['http://www.example.com/page1', 'http://www.example.com/page2']
5.提取链接
在ExampleSpider类中,可以使用LinkExtractor提取链接。LinkExtractor是Scrapy中的一个工具类,负责从网页中提取符合特定规则的链接。
导入LinkExtractor类:
from scrapy.linkextractors import LinkExtractor
在ExampleSpider类的parse方法中,可以使用LinkExtractor提取链接。例如,可以将LinkExtractor应用于响应的网页内容,提取所有符合特定规则的链接:
link_extractor = LinkExtractor(allow=r'.*')
links = link_extractor.extract_links(response)
可以使用allow参数指定一个正则表达式,在提取链接时只选择符合该正则表达式的链接。
6.保存链接到数据库
最后,将提取的链接保存到数据库中。可以使用Scrapy提供的Item和Pipeline来实现此功能。
在项目的items.py文件中,定义一个Item类来表示要保存的数据。例如,创建一个名为LinkItem的Item类,包含一个名为url的字段:
import scrapy
class LinkItem(scrapy.Item):
url = scrapy.Field()
在项目的pipelines.py文件中,定义一个Pipeline类来保存数据。例如,创建一个名为LinkPipeline的Pipeline类,将Item保存到数据库中:
import sqlite3
class LinkPipeline(object):
def __init__(self):
self.conn = sqlite3.connect('links.db')
self.cursor = self.conn.cursor()
self.cursor.execute('CREATE TABLE IF NOT EXISTS links (url TEXT)')
def process_item(self, item, spider):
url = item['url']
self.cursor.execute('INSERT INTO links VALUES (?)', (url,))
self.conn.commit()
return item
最后,在settings.py文件中启用该Pipeline:
ITEM_PIPELINES = {
'tutorial.pipelines.LinkPipeline': 300,
}
这样,当Spider提取到一个链接时,会先将其保存为一个LinkItem,然后通过LinkPipeline保存到数据库中。
以上就是使用LinkExtractor提取网页中的链接并保存到数据库的步骤。
参考链接:
1. Scrapy官方文档:https://docs.scrapy.org/en/latest/topics/link-extractors.html
2. SQLite官方文档:https://docs.python.org/3/library/sqlite3.html
