python spider 安装 package_[Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍

本文介绍了在Windows环境下安装Scrapy爬虫的步骤,包括解决安装过程中的问题和使用pip安装。接着展示了如何编写和运行第一个Scrapy爬虫程序,包括Scrapy项目的结构和关键文件的功能。最后提到了Scrapy的CrawlSpider类以及如何通过规则和回调函数解析网页内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作。但是,更为广泛使用的Python爬虫框架是——Scrapy爬虫。这是一篇在Windows系统下介绍 Scrapy爬虫安装及入门介绍的相关文章。

一. 安装过程

本文主要讲述Windows下的安装过程,首先我的Python是2.7.8版本。

主要通过Python的PIP语句进行安装:

pip install scrapy

7b57b6fd0a812a5a3f828031ada5cc52.png

然后,输入 pip install scrapy 命令进行安装。

37741106a87f11257fe86dd13c889c2c.png

安装成功后,通过cmd调用 scrapy 指令查看,表示安装成功。

67c890576f610952a2317313464adc5c.png

如果过程中存在如下图所示错误"no module named win32api",则需要下载安装win32,选择2.7.8版本。地址为:http://sourceforge.net/projects/pywin32/files/

7d187534338b6df8ac876bae89b1e3bd.png

此时,scrapy安装成功,可以进行第二步"第一个scrapy爬虫实现"了~

正如xifeijian大神所说:“作为Python爱好者,如果不知道easy_install或者pip中的任何一个的话,那么......”。easy_insall的作用和perl中的cpan,ruby中的gem类似,都提供了在线一键安装模块的傻瓜方便方式,而pip是easy_install的改进版,提供更好的提示信息,删除package等功能。老版本的python中只有easy_install,没有pip。常见的具体用法如下:

easy_install的用法:1) 安装一个包

$ easy_install$ easy_install"=="

2) 升级一个包

$ easy_install-U ">="pip的用法1) 安装一个包

$ pip install$ pip install==

2) 升级一个包 (如果不提供version号,升级到最新版本)

$ pip install--upgrade >=

3)删除一个包

$ pip uninstall

二. 第一个scrapy爬虫程序实现

官网介绍:

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了 页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。

An open source and collaborative framework for extracting the data you need from websites. In a fast, simple, yet extensible way.

下面是参考官网在windows下实现的第一个scrapy爬虫程序:

9a5a72e57a1dab3c00d206e7d943cd39.png

打开Python IDLE,创建myspider.py文件,代码如下:

1 importscrapy2

3 classBlogSpider(scrapy.Spider):4 name = 'blogspider'

5 start_urls = ['http://blog.scrapinghub.com']6

7 defparse(self, response):8 for url in response.css('ul li a::attr("href")').re(r'.*/\d\d\d\d/\d\d/$'):9 yieldscrapy.Request(response.urljoin(url), self.parse_titles)10

11 defparse_titles(self, response):12 for post_title in response.css('div.entries > ul > li a::text').extract():13 yield {'title': post_title}

如果此时你试图点击Run运行程序或在IDLE中输入 scrapy runspider myspider.py,似乎返回如下错误:

ffc360854d1599d606d7c22fbc67ddee.png

此时我怀疑Windows下需要调用cmd运行程序,还是强烈推荐在Linux下学习使用Python相关编程知识。调用cd去到文件所在目录:

cd G:\software\Program software\Python\python insert\scrapy project

然后在运行程序,结果输出如下所示:

8eca9385b63868c4f04cbc99d34f3f18.png

此时,程序能够运行成功了,不论结果如何、代码如何,总算在Windows下跑起来了。下面第三部分,我再简单介绍如何调用Scrapy爬虫进行一个入门相关的爬取~

三. Scrapy入门介绍

551c5cc329fcf80e43642c02678ecbad.png

Windows下Ctrl+R调用CMD命令行。输入命令如下:

1.chcp 936unknown encoding: cp65001异常时,需要将编码(UTF-8)修改为 简体中文(GBK)2.cd G:\software\Program software\Python\python insert\scrapy project

去到安装Scrapy目录下3.cd scrapy-itzhaopin-master\itzhaopin

再次去到下载的文件itzhaopin目录下4.scrapy crawl tencent

运行代码启动这个Spider,进行下载

最后运行会在scrapy-itzhaopin-master\itzhaopin文件夹下生产一个tencent.json的结果。数据量很大,下图只展示部分日期是2015-11-07的数据,如下所示:

26f5170ac925716530356cf2ac6afde3.png

9354bd71cd39a31c2fd4979ceab28293.png

其中代码itzhaopin项目的结果图如下所示:参考原文作者博客

├── itzhaopin

│ ├── itzhaopin

│ │ ├──__init__.py

│ │ ├── items.py

│ │ ├── pipelines.py

│ │ ├── settings.py

│ │ └── spiders

│ │ └──__init__.py

│ └── scrapy.cfg

scrapy.cfg: 项目配置文件

items.py: 需要提取的数据结构定义文件

pipelines.py:管道定义,用来对items里面提取的数据做进一步处理,如保存等

settings.py: 爬虫配置文件

spiders: 放置spider的目录

核心的几个py文件内容如下,详见github:

1.items.py:定义我们要抓取的数据

1 #Define here the models for your scraped items

2 #3 #See documentation in:

4 #http://doc.scrapy.org/en/latest/topics/items.html

5

6 from scrapy.item importItem, Field7 classTencentItem(Item):8 name = Field() #职位名称

9 catalog = Field() #职位类别

10 workLocation = Field() #工作地点

11 recruitNumber = Field() #招聘人数

12 detailLink = Field() #职位详情页链接

13 publishTime = Field() #发布时间

2.spiders文件夹中tencent_spider.py文件:实现Spider

Spider是一个继承自scrapy.contrib.spiders.CrawlSpider的Python类,有三个必需的定义的成员

name: 名字,这个spider的标识

start_urls:一个url列表,spider从这些网页开始抓取

parse():一个方法,当start_urls里面的网页抓取下来之后需要调用这个方法解析网页内容,同时需要返回下一个需要抓取的网页,或者返回items列表

1 importre2 importjson3

4 from scrapy.selector importSelector5 try:6 from scrapy.spider importSpider7 except:8 from scrapy.spider importBaseSpider as Spider9 from scrapy.utils.response importget_base_url10 from scrapy.utils.url importurljoin_rfc11 from scrapy.contrib.spiders importCrawlSpider, Rule12 from scrapy.contrib.linkextractors.sgml importSgmlLinkExtractor as sle13

14

15 from itzhaopin.items import *

16 from itzhaopin.misc.log import *

17

18

19 classTencentSpider(CrawlSpider):20 name = "tencent"

21 allowed_domains = ["tencent.com"]22 start_urls =[23 "http://hr.tencent.com/position.php"

24 ]25 rules =[26 Rule(sle(allow=("/position.php\?&start=\d{,4}#a")), follow=True, callback='parse_item')27 ]28

29 defparse_item(self, response):30 items =[]31 sel =Selector(response)32 base_url =get_base_url(response)33 sites_even = sel.css('table.tablelist tr.even')34 for site insites_even:35 item =TencentItem()36 item['name'] = site.css('.l.square a').xpath('text()').extract()[0]37 relative_url = site.css('.l.square a').xpath('@href').extract()[0]38 item['detailLink'] =urljoin_rfc(base_url, relative_url)39 item['catalog'] = site.css('tr > td:nth-child(2)::text').extract()[0]40 item['workLocation'] = site.css('tr > td:nth-child(4)::text').extract()[0]41 item['recruitNumber'] = site.css('tr > td:nth-child(3)::text').extract()[0]42 item['publishTime'] = site.css('tr > td:nth-child(5)::text').extract()[0]43 items.append(item)44 #print repr(item).decode("unicode-escape") + '\n'

45

46 sites_odd = sel.css('table.tablelist tr.odd')47 for site insites_odd:48 item =TencentItem()49 item['name'] = site.css('.l.square a').xpath('text()').extract()[0]50 relative_url = site.css('.l.square a').xpath('@href').extract()[0]51 item['detailLink'] =urljoin_rfc(base_url, relative_url)52 item['catalog'] = site.css('tr > td:nth-child(2)::text').extract()[0]53 item['workLocation'] = site.css('tr > td:nth-child(4)::text').extract()[0]54 item['recruitNumber'] = site.css('tr > td:nth-child(3)::text').extract()[0]55 item['publishTime'] = site.css('tr > td:nth-child(5)::text').extract()[0]56 items.append(item)57 #print repr(item).decode("unicode-escape") + '\n'

58

59 info('parsed' +str(response))60 returnitems61

62

63 def_process_request(self, request):64 info('process' +str(request))65 return request

3.pipelines.py:实现PipeLine

PipeLine用来对Spider返回的Item列表进行保存操作,可以写入到文件、或者数据库等。PipeLine只有一个需要实现的方法:process_item,例如我们将Item保存到JSON格式文件中:

1 #Define your item pipelines here

2 #3 #Don't forget to add your pipeline to the ITEM_PIPELINES setting

4 #See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html

5

6 from scrapy importsignals7 importjson8 importcodecs9

10 classJsonWithEncodingTencentPipeline(object):11

12 def __init__(self):13 self.file = codecs.open('tencent.json', 'w', encoding='utf-8')14

15 defprocess_item(self, item, spider):16 line = json.dumps(dict(item), ensure_ascii=False) + "\n"

17 self.file.write(line)18 returnitem19

20 defspider_closed(self, spider):21 self.file.close(22 )

4.settings.py:设置文件

1 #Scrapy settings for itzhaopin project

2 #3 #For simplicity, this file contains only the most important settings by

4 #default. All the other settings are documented here:

5 #6 #http://doc.scrapy.org/en/latest/topics/settings.html

7 #8

9 BOT_NAME = 'itzhaopin'

10

11 SPIDER_MODULES = ['itzhaopin.spiders']12 NEWSPIDER_MODULE = 'itzhaopin.spiders'

13

14 #Crawl responsibly by identifying yourself (and your website) on the user-agent

15 #USER_AGENT = 'itzhaopin (+http://www.yourdomain.com)'

16

17 ITEM_PIPELINES ={18 'itzhaopin.pipelines.JsonWithEncodingTencentPipeline': 300,19 }20

21 LOG_LEVEL = 'INFO'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值