这篇文章主要讲解了“怎么用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,具体的方法是在命令行执行下面的命令即可。
环境安装好之后,我们来用Scrapy实现一个简单的爬虫,抓取本博客网站的文章标题,地址和摘要。
1
1
2
3
4
5
6
7
8 |
设置待抓取内容的字段,本例中就是文章的标题,地址和摘要
|
修改”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。
这里我们采用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 # 如果网络慢,可以适当加些延迟,单位是秒 |
<td class="crayon-code" ">
$ scrapy crawl my_crawler
别忘了启动MongoDB并创建”bjhee”数据库哦。现在你可以在MongoDB里查询到记录了。
总结下,使用Scrapy来构建一个网络爬虫,你需要做的就是:厦门叉车租赁公司
感谢各位的阅读,以上就是“怎么用Scrapy构建一个网络爬虫”的内容了,经过本文的学习后,相信大家对怎么用Scrapy构建一个网络爬虫这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是天达云,小编将为大家推送更多相关知识点的文章,欢迎关注!