怎么用Scrapy构建一个网络爬虫
更新:HHH   时间:2023-1-7


这篇文章主要讲解了“怎么用Scrapy构建一个网络爬虫”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Scrapy构建一个网络爬虫”吧!

我们来看下Scrapy怎么做到这些功能的。首先准备Scrapy环境,你需要安装Python(本文使用v2.7)和pip,然后用pip来安装lxml和scrapy。个人强烈建议使用virtualenv来安装环境,这样不同的项目之间不会冲突。详细步骤这里就不赘述了。对于Mac用户要注意,当使用pip安装lxml时,会出现类似于的下面错误:

Error: #include “xml/xmlversion.h” not found

解决这个问题,你需要先安装Xcode的command line tools,具体的方法是在命令行执行下面的命令即可。

$ xcode-select --install

环境安装好之后,我们来用Scrapy实现一个简单的爬虫,抓取本博客网站的文章标题,地址和摘要。

    1

    1

    2

    3

    4

    5

    6

    7

    8

    1. 设置待抓取内容的字段,本例中就是文章的标题,地址和摘要

修改”items.py”文件,在”MyCrawlerItem”类中加上如下代码:

Python

# -*- coding: utf-8 -*-

import scrapy


class MyCrawlerItem(scrapy.Item):

    title = scrapy.Field()    # 文章标题

    url = scrapy.Field()      # 文章地址

    summary = scrapy.Field()  # 文章摘要

    pass



对于XPath不熟悉的朋友,可以通过Chrome的debug工具获取元素的XPath。

    1

    1. 将结果保存到数据库

这里我们采用MongoDB,你需要先安装Python的MongoDB库”pymongo”。编辑”my_crawler”目录下的”pipelines.py”文件,在”MyCrawlerPipeline”类中加上如下代码:

Python

# -*- coding: utf-8 -*-

import pymongo


from scrapy.conf import settings

from scrapy.exceptions import DropItem


class MyCrawlerPipeline(object):

    def __init__(self):

        # 设置MongoDB连接

        connection = pymongo.Connection(

            settings['MONGO_SERVER'],

            settings['MONGO_PORT']

        )

        db = connection[settings['MONGO_DB']]

        self.collection = db[settings['MONGO_COLLECTION']]


    # 处理每个被抓取的MyCrawlerItem项

    def process_item(self, item, spider):

        valid = True

        for data in item:

            if not data:  # 过滤掉存在空字段的项

                valid = False

                raise DropItem("Missing {0}!".format(data))


        if valid:

            # 也可以用self.collection.insert(dict(item)),使用upsert可以防止重复项

            self.collection.update({'url': item['url']}, dict(item), upsert=True)


        return item

再打开”my_crawler”目录下的”settings.py”文件,在文件末尾加上pipeline的设置:

Python

ITEM_PIPELINES = {

    'my_crawler.pipelines.MyCrawlerPipeline': 300,    # 设置Pipeline,可以多个,值为执行优先级

}


# MongoDB连接信息

MONGO_SERVER = 'localhost'

MONGO_PORT = 27017

MONGO_DB = 'bjhee'

MONGO_COLLECTION = 'articles'


DOWNLOAD_DELAY=2    # 如果网络慢,可以适当加些延迟,单位是秒


  1. <td class="crayon-code" ">

  2. $ scrapy crawl my_crawler

    别忘了启动MongoDB并创建”bjhee”数据库哦。现在你可以在MongoDB里查询到记录了。

    总结下,使用Scrapy来构建一个网络爬虫,你需要做的就是:厦门叉车租赁公司

    • “items.py”中定义爬取字段

    • 在”spiders”目录下创建你的爬虫,编写解析函数和规则

    • “pipelines.py”中对爬取后的结果做处理

    • “settings.py”设置必要的参数


感谢各位的阅读,以上就是“怎么用Scrapy构建一个网络爬虫”的内容了,经过本文的学习后,相信大家对怎么用Scrapy构建一个网络爬虫这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是天达云,小编将为大家推送更多相关知识点的文章,欢迎关注!

返回云计算教程...