[TOC]
参考文档:
scrapy的使用 :http://python.jobbole.com/86405/
pyc的理解 : http://blog.csdn.net/carolzhang8406/article/details/6342174,
https://www.zhihu.com/question/30296617
1.安装
(因为scrapy 下层非常依赖 twisted,twisted 暂时在py3.0以上还不稳定。所以,python 3.0 以上不能完全兼容,建议使用2.7)
pip install Scrapy
2.创建第一个项目
scrapy startproject firstscrapy(your_project_name)
3.文件说明:
scrapy.cfg 项目的配置信息,主要为Scrapy命令行工具提供一个基础的配置信息。(真正爬虫相关的配置信息在settings.py文件中)
items.py 设置数据存储模板,用于结构化数据,如:Django的Model
pipelines 数据处理行为,如:一般结构化的数据持久化
settings.py 配置文件,如:递归的层数、并发数,延迟下载等
spiders 爬虫目录,如:创建文件,编写爬虫规则
*.pyc 是由py文件经过编译后二进制文件,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码。
是由 python 的虚 拟机来执行的。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的 python是无法执行的。pyc文件也是可以反编译的,不同版本编译后的pyc文件是不同。
注意:一般创建爬虫文件时,以网站域名命名
4.测试项目
在spiders目录下创建一个新爬虫文件 firstScrapy/spiders/xiaohua_spider.py
创建新文件:xiaohua_spider.py
import scrapy
class XiaoHuarSpider(scrapy.spiders.Spider):
name = "xiaohuar"
#1.爬虫文件需要定义一个类,并继承scrapy.spiders.Spider
#2.必须定义name,即爬虫名,如果没有name,会报错。
#scrapy crawl xiaohuar --nolog
#name 的string 必须和 crawl的 name 一致。否者报错
allowed_domains = ["xiaohuar.com"]
start_urls = [
"http://www.xiaohuar.com/hua/",
]
def parse(self, response):
# print(response, type(response))
# from scrapy.http.response.html import HtmlResponse
# print(response.body_as_unicode())
current_url = response.url #爬取时请求的url
body = response.body #返回的html
unicode_body = response.body_as_unicode()#返回的html unicode编码
5.运行
scrapy crawl xiaohuar --nolog
格式:scrapy crawl+爬虫名 –nolog即不显示日志
(三个*,在makedown表示下划线)
如果能简单运行,则继续下一步。
6.scrapy查询语法:
和beautifulsoup4 大多数语法还是相通的。
当我们爬取大量的网页,如果自己写正则匹配,会很麻烦,也很浪费时间,令人欣慰的是,scrapy内部支持更简单的查询语法,帮助我们去html中查询我们需要的标签和标签内容以及标签属性。下面逐一进行介绍:
查询子子孙孙中的某个标签(以div标签为例)://div
查询儿子中的某个标签(以div标签为例):/div
查询标签中带有某个class属性的标签://div[@class=’c1′]即子子孙孙中标签是div且class=‘c1’的标签
查询标签中带有某个class=‘c1’并且自定义属性name=‘alex’的标签://div[@class=’c1′][@name=’alex’]
查询某个标签的文本内容://div/span/text() 即查询子子孙孙中div下面的span标签中的文本内容
查询某个属性的值(例如查询a标签的href属性)://a/@href
完整例子: