您的位置:首页 > 编程语言 > Python开发

python scrapy学习踩点

2014-07-19 15:28 239 查看
内容很多,今天简单学习了scrapy的数据抓取基本流程。

创建项目-更改items-写spiders逻辑。

使用命令:scrapy startproject wo 创建名为wo的项目,结构如下:

C:.

│  scrapy.cfg



└─wo

    │  items.py

    │  pipelines.py

    │  settings.py

    │  __init__.py

    │

    └─spiders

            __init__.py

说明:

scrapy.cft:项目配置文件,暂时还没学习怎么使用。

items.py:items类似python的字典,在spider数据爬取逻辑实现后保存数据时使用。

pipelines.py:管道,还没学习怎么用。

settings.py:项目配置,还没学怎么用。

__init__.py:暂时没学怎么使用

spiders:spider数据爬取逻辑就在这个目录下实现。

修改items.py:

# Define here the models for your scraped items

#

# See documentation in:

# http://doc.scrapy.org/topics/items.html
from scrapy.item import Item, Field

class woItem(Item):
title=Field()
link=Field()
desc=Field()

增加woppider.py:

from scrapy.spider import BaseSpider

from scrapy.selector import HtmlXPathSelector

from wo.items import woItem

class wo(BaseSpider):
name='wo'
allowed_wo=['dmoz.org']
start_urls=["http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"]
def parse(self,response):
hxs = HtmlXPathSelector(response)
sites = hxs.select('//ul/li')
items=[]
for site in sites:
item=woItem()
item['title'] = site.select('a/text()').extract()
item['link'] = site.select('a/@href').extract()
item['desc'] = site.select('text()').extract()
items.append(item)
return items

代码说明:

BaseSpider属性:

name:爬虫名字,必须唯一。

start_urls:定义爬取的开始网页地址列表。

parse方法:response有且只有一个参数。

HtmlXPathSelector使用了Xpath来解析数据//ul/li表示选择所有的ul标签下的li标签a/@href表示选择所有a标签的href属性a/text()表示选择a标签文本a[@href="abc"]表示选择所有href属性是abc的a标签为了方便使用XPaths,Scrapy提供XPathSelector 类,  HtmlXPathSelector (HTML数据解析) 和XmlXPathSelector (XML数据解析)。 为了使用他们你必须通过一个 Response 对象对他们进行实例化操作。你会发现Selector对象展示了文档的节点结构。因此,第一个实例化的selector必与根节点或者是整个目录有关 。 Selectors 有三种方法select():返回selectors列表, 每一个select表示一个xpath参数表达式选择的节点.extract():返回一个unicode字符串,该字符串为XPath选择器返回的数据re(): 返回unicode字符串列表,字符串作为参数由正则表达式提取出来
scrapy crawl wo -o items.json -t json
所有抓取的items将以JSON格式被保存在新生成的items.json 文件中

语法解释部分基本都是参考网上教程整理,我这里只说自己操作过程中遇到的问题:

1、行缩进的问题

参考网上代码过程中可能有些不可见字符,导致调试一直报错,最后才发现缩进有问题。

2、wo
4000
spider中定义的name,必须唯一,调用的时候就是取这个name='wo'值。

3、类名wo与spider的文件名“wospider”不能一样,否则import wo工程下的items模块会报错。这里我调试了很久才发现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python scrapy 爬虫 xpath