零Python基础scrapy爬虫踩坑记

因为想要获取一些关于古诗词的数据,但并没有找到满意的数据库文件,所以就想通过爬虫来获取,十分苦闷的是,对于Python爬虫,之前从来没有接触过,还好在git上找到了代码:GushiwenSpider ,感激之情无以言表,然而尴尬的是,源码就在手上,愣是运行的一塌糊涂。

为了做现在的项目,所以电脑里有Python2.7,就没有安装最新版,先是安装了pip,修改了环境变量,项目以scrapy开源框架,所以需要安装scrapy

但实际情况是,并不能自动下载所需要的whl文件,所以在下载某个包出错的时候,可以用一个非常有用的网址:Unofficial Windows Binaries for Python Extension Packages

把需要的whl文件手动下载安装。

部署好后做一下测验:scrapy shell .......

scrapy测试

项目里面还用到了scrapy_redis,scrapy-redis的原理是巧妙的利用redis队列,实现 request queue和 items queue,利用redis的 set实现request的去重,将scrapy从单台机器扩展多台机器,实现较大规模的爬虫集群。

安装Redis,然后切换目录到C:\redis运行

redis-server.exe redis.windows.conf

运行redis

这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。

切换到redis目录下运行redis-cli.exe -h 127.0.0.1 -p 6379。

测试:

设置键值对set myKey abc

取出键值对get myKey

测试redis

用scrapy crawl ......  启动项目

用scrapy check检测爬虫是否正常

运行

然而也不知道是因为爬虫项目运行的不正确还是redis不正确,其他几个爬虫文件并不能爬到数据,于是进度开始停滞不前。

在网上找了关于爬虫的视频教程,准备学习一下原理:

手头并没有其他的爬虫项目,于是就拿这个古诗词的爬虫项目解析了,望编写这个项目的大佬见谅,再次表达感激之情。

items.py是项目的目标文件

Item是保存爬取到的数据的容器;其使用方法和python字典类似, 并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。

item.py

pipelines.py是项目的管道文件

管道文件:

当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。

每个item pipeline组件(有时称之为“Item Pipeline”)是实现了简单方法的Python类。他们接收到Item并通过它执行一些行为,同时也决定此Item是否继续通过pipeline,或是被丢弃而不再进行处理。以下是item pipeline的一些典型应用:

1.验证爬取的数据(检查item包含某些字段),如果有做相应处理

2.查重(并丢弃),在init方法里创建一个集合,每个数据存到集合里面,如果集合里有这个数据就可以不往里面写了,管道就是一个个接收item的,所以可以做去重处理,url请求去重是在调度器实现,数据去重在管道实现。

3.将爬取结果保存到数据库中

pipelines.py

settings.py是项目的设置文件.

settings.py(1)


settings.py(2)


官网教程管道实例


Rules的一些说明:

rules: 是Rule对象的集合,用于匹配目标网站并排除干扰

parse_start_url: 用于爬取起始响应,必须要返回ItemRequest中的一个。

因为rulesRule对象的集合,所以这里也要介绍一下Rule。它有几个参数:link_extractorcallback=Nonecb_kwargs=Nonefollow=Noneprocess_links=Noneprocess_request=None

其中的link_extractor既可以自己定义,也可以使用已有LinkExtractor类,主要参数为:

allow:满足括号中“正则表达式”的值会被提取,如果为空,则全部匹配。

deny:与这个正则表达式(或正则表达式列表)不匹配的URL一定不提取。

allow_domains:会被提取的链接的domains。

deny_domains:一定不会被提取链接的domains。

restrict_xpaths:使用xpath表达式,和allow共同作用过滤链接。还有一个类似的restrict_css



Item Loader一些补充:

Item Loaders提供了一种便捷的方式填充抓取到的 Items 。从另一方面来说, Items 提供保存抓取数据的容器, 而 Item Loaders提供的是填充容器的机制。

要使用Item Loader, 你必须先将它实例化. 可以使用类似字典的对象来进行实例化, 或者不使用对象也可以, 当不用对象进行实例化的时候,Item会自动使用 ItemLoader.default_item_class 属性中指定的Item 类在Item Loader constructor中实例化.



add_xpath

name 字段被从页面中两个不同的XPath位置提取:

1.//div[@class="product_name"]

2.//div[@class="product_title"]

换言之,数据通过用add_xpath()的方法,把从两个不同的XPath位置提取的数据收集起来. 这是将在以后分配给name字段中的数据。


最终, 当所有数据被收集起来之后, 调用ItemLoader.load_item()方法, 实际上填充并且返回了之前通过调用add_xpath(),add_css(),and add_value()所提取和收集到的数据的Item.



直到刚才,我终于找出了我运行不出结果的原因,这半个月以来,我一直以为,项目里给的数据库表结构长成如下的样子:

这使我百思不得其解,然而我只是觉得其中的玄妙并不是我等凡人所能领会的,照做就可以了,一直觉得是运行不出是代码的某部分可能与Windows或Python2.7不兼容之类的导致,直到刚才某一刹那,我把excel的下拉框向上移了一下......原来与这个代码不兼容的,是我的智商。

参考:

[Python]MySQLdb for Python使用指南/Python的数据库操作

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容