欢迎访问宙启技术站
智能推送

基于Scrapy的网络爬虫实战:爬取百度搜索结果

发布时间:2024-01-04 03:04:59

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。