标签:
报名了飞谷六期的爬虫项目,但是自己相关的基础还是较弱,每天都有种无所事事的感觉。决定还是记录一下每天学习到的知识,自己看看也知道学习了些什么。
1.XShell连接阿里云,Xftp传输文件
2.把例子的文件拷贝出来后,link文件夹中的代码如图:
开始看到这些文件,我想说什么鬼。然后看了一下 Scrapy入门,得知,这些文件是在新建scrapy项目后自动生成的。如果建立一个名叫tutorial的新项目,可以输入命令(我都是用的飞谷云提供的环境,linux的)
scrapy startproject tutorial
然后就会生成一个tutorial目录
tutorial/ scrapy.cfg tutorial/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py ...
对比了一下新生成的这些文件和给出的例子文件,发现大多数的文件没有改动,只有
①items.py有少量变化
②spiders文件夹下需要自己写一个py文件,给出具体的爬虫代码。
这两个文件中具体要添加什么代码呢?我也不会,就先照着Scrapy入门的例子抄一下吧
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 TutorialItem(Item): # define the fields for your item here like: # name = Field() pass class DmozItem(Item): title = Field() link = Field() desc = Field()
spiders文件夹下新建dmoz_spider.py
import scrapy class DmozSpider(scrapy.spiders.Spider): name = "dmoz" allowed_domains = ["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): filename = response.url.split("/")[-2] with open(filename, ‘wb‘) as f: f.write(response.body)
split("/")[-2]:是指以"/"为分隔符分割后,选取倒数第二的部分。 python/Books/分解后的结果是python Books 空,倒数第二个就是Books
在有scrapy.cfg的文件夹下运行
scrapy crawl dmoz
结果,尼玛居然报错了/(ㄒoㄒ)/~~
去问万能的度娘,度娘说是因为我的scrapy的版本太低了,应该看这份教程orz
对比了一下,发现items.py里面没变化,就是dmoz_spider.py导入的模块名字变了
from scrapy.spider import BaseSpider class DmozSpider(BaseSpider): name = "dmoz" allowed_domains = ["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): filename = response.url.split("/")[-2] with open(filename, ‘wb‘) as f: f.write(response.body)
运行,注意后面的dmoz就是dmoz_spider.py文件中name中的字符,如果写了其他的名字要改的。
scrapy crawl dmoz
成功了~好开心~可以得到相应页面源码的文件了~
刚才发生的事情:
Scrapy为Spider的 start_urls
属性中的每个URL创建了 scrapy.Request
对象,并将 parse
方法作为回调函数(callback)赋值给了Request。
Request对象经过调度,执行生成 scrapy.http.Response
对象并送回给spider parse()
方法。
可以通过如下命令启动shell:
scrapy shell "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"
结果是这个样子的
得到信息头,可以通过输入:
response.headers
得到信息内容,可以通过输入:
response.body
有两个选择器可以用于选择内容中的有用信息,分别是hxs和xxs(注意,这个是老版本的,新版本的语句变了)。例:
hxs.select(‘/html/head/title‘)
括号里面写的其实是一个XPath语句
最有用的XPath语句如下图,其他的遇到再查好了。
这样,通过选择器,我们就可以提取有用信息了。
标签:
原文地址:http://www.cnblogs.com/dplearning/p/4902622.html