【scrapy框架使用】scrapy框架使用

[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
完整例子:
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,915评论 18 139
  • 使用urllib模块爬取图片并下载到本地 python爬虫框架-Scrapy学习自:http://python.j...
    大婶N72阅读 464评论 5 0
  • scrapy学习笔记(有示例版) 我的博客 scrapy学习笔记1.使用scrapy1.1创建工程1.2创建爬虫模...
    陈思煜阅读 12,776评论 4 46
  • 婉仪姐姐,你是从什么时候开始变得坚不可摧,婉仪姐姐我好心疼你,我在你的书里评论,“一个人,不会太孤单了么。。愿你将...
    傅攸宁阅读 257评论 0 0
  • 常常责怪自己当初不应该 常常后悔没有把你留下来 为什么明明相爱 到最后还是要分开 是否我们总是徘徊在心门之外 谁知...
    陈晓依阅读 447评论 0 0