python Scrapy安装、教程、及爬虫
2016-04-15 17:42
756 查看
1、首先要安装好scrapy模块,讲真,真的要找到一个好的安装教程,你会省很大力 传送门 b( ̄▽ ̄)d
2、Scrapy是一个用python编写的,很轻巧方便的网络爬虫。
简单的理解,它可以爬取某一个网页的所需信息和链接传回并储存,然后本地代码可以继续访问爬取到的链接,并获取所需信息继续传回储存。
这里有比较严谨的解释 http://hao.jobbole.com/python-scrapy/
对于爬虫教程网上也有很多 http://scrapy-chs.readthedocs.org/zh_CN/latest/intro/tutorial.html
3、首先先创建一个爬虫项目,我爬的是这个网址 http://heart.39.net/zhlm/bljd/xzb/
运行 >> cmd >> 切换到存放代码的目录中 >> 执行命令:scrapy startproject heart("heart"为项目名称)
然后它就会在目录生成一些文件,主要为(以下均为我的简单理解,如有不对,请指出O(∩_∩)O谢谢):
4、定义items
我要在这个网站中获取 文章标题、url(即文章链接)、文章正文
![](http://img.blog.csdn.net/20160413220122063)
创建一个scrapy.Item类,并用scrapy.Field()的类属性来定义一个item
5、编写爬虫(spider)
spider是用户编写的类,用于写要抓取的信息的代码,要继承
scrapy.Spider 类,并定义三个属性:
-- name:用于区别每一个spider,名字是唯一的,且不同的spider定义不同的name,叫啥你开心就好!!
-- start_urls:从属性名就可以看出来,这是初始的网址,爬虫从初始网页上爬取这个网页包含的url,然后会继续访问 子url 获取信息。(可以不唯一)
-- parse():spider的一个方法。用于提取原始网页的数据,生成item,并生成用于进一步处理的 子url 数据。
☟☟我觉得以下在小黑框里输入的东西一定要输一遍
(1)、运行cmd,进入项目根目录,输入scrapy crawl heart
(2)、输入 scrapy shell “ http://heart.39.net/zhlm/bljd/xzb/(即初始网址)”
(3)、提取item(使用shell中的selector选择器,然后sel.xpath)
讲一下在xpath中:
以 //div[@class="newslist"]/ul/li/a/@href 和 //title/text()为例吧!
① // 开始要为两个斜杠;
② div [@class="newslist"] 选择类为 class="newslist" 的 div;
③ a/@href 提取url用@href ;
④ //title/text() 提取正文用 text();
⑤ 另外extract() 序列化该节点为uncoide字符串并返回list ;
具体方法可以看下面代码,我不太会表达(或者可以去看教程(*/ω╲*))
(4)、代码:
下面是其他的文件内容。
6、pipelines.py 和 settings.py
因为我在储存在本地,所以这里pipelines.py文件不做修改
以下是settings.py
7、main.py文件(与heart文件夹在同一目录下)
是不是感觉做完以上工作就在IDE上运行会出错啊【欠揍脸 (ˉ▽ ̄~) 切~~】
唔。。。至少我是。。。
错误为:ImportError: No module named heart.items
所以要新建一个main.py文件来“统领全局”,然后要运行这个文件:
8、可能有时候用 xpath 爬取的数据不完全,可以试着用其他的抓取方法抓取这部分数据。
我要说一句:我好讨厌这一行代码啊啊啊
2、Scrapy是一个用python编写的,很轻巧方便的网络爬虫。
简单的理解,它可以爬取某一个网页的所需信息和链接传回并储存,然后本地代码可以继续访问爬取到的链接,并获取所需信息继续传回储存。
这里有比较严谨的解释 http://hao.jobbole.com/python-scrapy/
对于爬虫教程网上也有很多 http://scrapy-chs.readthedocs.org/zh_CN/latest/intro/tutorial.html
3、首先先创建一个爬虫项目,我爬的是这个网址 http://heart.39.net/zhlm/bljd/xzb/
运行 >> cmd >> 切换到存放代码的目录中 >> 执行命令:scrapy startproject heart("heart"为项目名称)
然后它就会在目录生成一些文件,主要为(以下均为我的简单理解,如有不对,请指出O(∩_∩)O谢谢):
<span style="font-size:18px;">
│ scrapy.cfg #项目的配置文件 │ └─heart │ items.py #定义items,就是你想爬的那一类的叫啥(起个名儿),然后你爬下来后它就会存在哪个下面 │ pipelines.py #管道,即如果想将爬到的东西存到数据库中,可以在这写明,如果存到本地可以不用改 │ settings.py #放置,即储存的路径,格式 │ __init__.py │ └─spiders #放置spider代码的目录,即在它下面创建.py文件来写爬虫代码 __init__.py
</span>
4、定义items
我要在这个网站中获取 文章标题、url(即文章链接)、文章正文
创建一个scrapy.Item类,并用scrapy.Field()的类属性来定义一个item
<span style="font-size:18px;">import scrapy class HeartItem(scrapy.Item): title=scrapy.Field() #文章标题 link=scrapy.Field() #文章链接 text=scrapy.Field() #文章正文</span>
5、编写爬虫(spider)
spider是用户编写的类,用于写要抓取的信息的代码,要继承
scrapy.Spider 类,并定义三个属性:
-- name:用于区别每一个spider,名字是唯一的,且不同的spider定义不同的name,叫啥你开心就好!!
-- start_urls:从属性名就可以看出来,这是初始的网址,爬虫从初始网页上爬取这个网页包含的url,然后会继续访问 子url 获取信息。(可以不唯一)
-- parse():spider的一个方法。用于提取原始网页的数据,生成item,并生成用于进一步处理的 子url 数据。
☟☟我觉得以下在小黑框里输入的东西一定要输一遍
(1)、运行cmd,进入项目根目录,输入scrapy crawl heart
(2)、输入 scrapy shell “ http://heart.39.net/zhlm/bljd/xzb/(即初始网址)”
(3)、提取item(使用shell中的selector选择器,然后sel.xpath)
讲一下在xpath中:
以 //div[@class="newslist"]/ul/li/a/@href 和 //title/text()为例吧!
① // 开始要为两个斜杠;
② div [@class="newslist"] 选择类为 class="newslist" 的 div;
③ a/@href 提取url用@href ;
④ //title/text() 提取正文用 text();
⑤ 另外extract() 序列化该节点为uncoide字符串并返回list ;
具体方法可以看下面代码,我不太会表达(或者可以去看教程(*/ω╲*))
(4)、代码:
<span style="font-size:18px;">#coding=utf-8 import scrapy from scrapy.http import Request from scrapy.selector import Selector from heart.items import HeartItem #从items.py导入item class heartSpider(scrapy.Spider): name = "heart" allowed_domains=["39.net"] #网址的域名 start_urls=[ 'http://heart0.39.net/zhlm/bljd/xzb/', 'http://heart0.39.net/zhlm/bljd/xzb/index_1.html', 'http://heart0.39.net/zhlm/bljd/xzb/index_2.html' ] #初始网址可以不唯一,如果网址较多且规律,可以使用for循环 def parse(self,response): selector=Selector(response) #shell载入存入response,selector在response中提取元素 item=HeartItem() #导入item link=selector.xpath('//div[@class="newslist"]/ul/li/a/@href').extract() #提取原始网页上所需的 子url for i in range(len(link)): #获取所获 子url 数 yield scrapy.Request(link[i],callback=self.parseContent,meta={'item':item}) #为子网页做准备,以子url链接下面的访问子网页代码 def parseContent(self,response): selector=Selector(response) #载入 子response item=response.meta['item'] #嗯,item html=selector.xpath('//div[@class="art_con"]') #获取要爬取信息的div部分 for sel in html: item['title']=sel.xpath('//title/text()').extract() #这是文章标题 item['text']=sel.xpath('p/text()').extract() #文章正文 #啊啊啊啊,其实就是HTML代码嘛!!!说起来好纠结。。。 item['link']=response.url #那些 子url。。。 yield item #最后存入item spider=heartSpider()</span>
下面是其他的文件内容。
6、pipelines.py 和 settings.py
因为我在储存在本地,所以这里pipelines.py文件不做修改
以下是settings.py
<span style="font-size:18px;">BOT_NAME = 'heart0' #name USER_AGENT='Mozilla/4.0(compatible;MSIE 5.5;Windows NT)' FEED_URI=u'file///E:/360Apps/test/Scrapy/heart0/heartache.csv' #储存路径 FEED_FORMAT='CSV' #扩展名,即你想要存储成什么格式 SPIDER_MODULES = ['heart0.spiders'] NEWSPIDER_MODULE = 'heart0.spiders'</span>
7、main.py文件(与heart文件夹在同一目录下)
是不是感觉做完以上工作就在IDE上运行会出错啊【欠揍脸 (ˉ▽ ̄~) 切~~】
唔。。。至少我是。。。
错误为:ImportError: No module named heart.items
所以要新建一个main.py文件来“统领全局”,然后要运行这个文件:
<span style="font-size:18px;">from scrapy import cmdline cmdline.execute("scrapy crawl heart".split()) #启动用于爬取 “39.net” 的spider </span>如果还会出现以上错误,可以试着在新窗口打开文件夹试一下。
8、可能有时候用 xpath 爬取的数据不完全,可以试着用其他的抓取方法抓取这部分数据。
我要说一句:我好讨厌这一行代码啊啊啊
<span style="font-size:18px;">
相关文章推荐
- 【python项目实战】BBS论坛(4)尝试页面美化
- 【python项目实战】BBS论坛(3)页面输出数据,及跳转
- Python 练习实例15
- 在ubuntu下使用VIM作为python开发环境
- Python 练习实例14
- Python之I/O多路复用
- 【python项目实战】BBS论坛(2)页面初始设计
- Python GUI库
- python 继承
- Python之路【第二十篇】其他WEB框架
- python中多进程+协程的使用以及为什么要用它
- Python GUI编程各种实现的对比
- 实现杨辉三角的10种解法--体验Python之美
- Python中的正则表达式教程
- python实现小旋转亮片
- Python下的select模块及方法解释
- python学习笔记(pip下载安装)
- Java ProcessBuilder 运行一个zip包里的python
- PYTHON-嵌套列表list的解析学习
- 【python项目实战】BBS论坛 (1)搭建项目框架