python scrapy学习踩点

内容很多,今天简单学习了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、wospider中定义的name,必须唯一,调用的时候就是取这个name='wo'值。

3、类名wo与spider的文件名“wospider”不能一样,否则import wo工程下的items模块会报错。这里我调试了很久才发现。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值