基于Scrapy的网络爬虫实战:爬取百度搜索结果
Scrapy是一个基于Python的强大的网络爬虫框架,它提供了许多开箱即用的功能,使得开发者可以方便快捷地编写和运行网络爬虫。在本文中,我们将介绍如何使用Scrapy来爬取百度搜索结果,并提供一个使用例子。
首先,我们需要安装Scrapy。可以使用pip命令来安装Scrapy:
pip install scrapy
安装完成后,我们就可以开始编写我们的网络爬虫了。
首先,我们创建一个新的Scrapy项目:
scrapy startproject baidu_search
这将在当前目录下创建一个名为baidu_search的目录,其中包含Scrapy项目的基本结构。
接下来,我们需要定义我们的爬虫,创建一个新的Spider:
cd baidu_search scrapy genspider search spider
这将在spiders目录下创建一个名为search.py的文件,其中包含我们的爬虫代码。
我们打开search.py文件,开始编写我们的爬虫逻辑。
首先,我们需要设置我们要爬取的网站的URL。在start_urls变量中,我们可以指定一个或多个URL,这里我们指定为https://www.baidu.com/s?wd=scrapy,表示我们要爬取百度搜索“scrapy”的结果页面。
import scrapy
class SearchSpider(scrapy.Spider):
name = 'search'
start_urls = ['https://www.baidu.com/s?wd=scrapy']
接下来,我们需要编写解析网页的函数。在Scrapy中,我们可以使用XPath或CSS选择器来定位和提取网页中的数据。这里我们使用XPath来提取搜索结果的标题和链接。
import scrapy
class SearchSpider(scrapy.Spider):
name = 'search'
start_urls = ['https://www.baidu.com/s?wd=scrapy']
def parse(self, response):
results = response.xpath('//div[@class="result c-container "]')
for result in results:
title = result.xpath('.//h3/a//text()').get()
link = result.xpath('.//h3/a/@href').get()
yield {
'title': title,
'link': link
}
在这个例子中,我们使用XPath的//div[@class="result c-container "]来定位每个搜索结果的HTML元素,然后使用.//h3/a//text()和.//h3/a/@href来提取标题和链接。
最后,我们需要指定如何启动我们的爬虫和保存爬取到的数据。在项目的根目录下,我们创建一个名为baidu_search.csv的文件,并修改settings.py文件,配置保存爬取结果的管道。
# 在settings.py文件中添加以下代码
ITEM_PIPELINES = {
'baidu_search.pipelines.BaiduSearchPipeline': 300,
}
然后,我们创建一个名为pipelines.py的文件,定义一个保存爬取结果的管道。
import csv
class BaiduSearchPipeline(object):
def __init__(self):
self.file = open('baidu_search.csv', 'w', newline='', encoding='utf-8')
self.writer = csv.writer(self.file)
self.writer.writerow(['title', 'link'])
def process_item(self, item, spider):
self.writer.writerow([item['title'], item['link']])
return item
def close_spider(self, spider):
self.file.close()
在这个例子中,我们使用csv模块来创建一个CSV文件,并在文件头写入标题。然后,每当爬虫解析到一个结果时,我们将标题和链接写入CSV文件中。最后,在爬虫关闭时,我们关闭文件。
现在,我们可以运行我们的爬虫了:
scrapy crawl search
爬虫运行结束后,我们可以在项目的根目录下找到baidu_search.csv文件,其中包含了我们爬取到的百度搜索结果的标题和链接。
总结来说,使用Scrapy来爬取百度搜索结果是相对简单的。我们只需要定义爬虫的URL和解析逻辑,然后运行爬虫即可。通过编写自定义的管道,我们还可以对爬取结果进行处理和保存。希望这个教程能帮助你更好地理解和使用Scrapy。
