scrapy

  • 安装scrapy
pip install scrapy

windows可能安装失败,需要先安装c++库或twisted,pip install twisted

  • 创建项目
scrapy startproject tutorial

该命令将会创建包含下列内容的 tutorial 目录:

tutorial/
scrapy.cfg
tutorial/
__init__.py
items.py
pipelines.py
settings.py
spiders/
__init__.py
... scrapy.cfg: 项目的配置文件
tutorial/: 该项目的python模块。之后您将在此加入代码。
tutorial/items.py: 项目中的item文件.
tutorial/pipelines.py: 项目中的pipelines文件.
tutorial/settings.py: 项目的设置文件.
tutorial/spiders/: 放置spider代码的目录.
  • 编写第一个爬虫

为了创建一个Spider,您必须继承 scrapy.Spider 类,定义以下三个属性

scrapy genspider dmoz dmoz.com 终端命令可以直接完成这步操作

  • 属性

    • name: 用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字
    • start_urls: 包含了Spider在启动时进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取
    • parse() 是spider的一个方法。 被调用时,每个初始URL完成下载后生成的
    • Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象
 import scrapy

 class DmozSpider(scrapy.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)
  • 爬取
scrapy crawl dmoz

过程:Scrapy为Spider的 start_urls 属性中的每个URL创建了 scrapy.Request 对象,并将 parse 方法作为回调函数(callback)赋值给了Request;Request对象经过调度,执行生成 scrapy.http.Response 对象并送回给spider parse() 方法。


xpath(): 传入xpath表达式,返回该表达式所对应的所有节点的selector list列表 。
css(): 传入CSS表达式,返回该表达式所对应的所有节点的selector list列表.
extract(): 序列化该节点为unicode字符串并返回list。
re(): 根据传入的正则表达式对数据进行提取,返回unicode字符串list列表。
  • scrapy shell
scrapy shell "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"
  • response

    • response.body:包体
    • response.headers:包头
    • response.xpath():xpath选择器
    • response.css():css选择器
 import scrapy

 class DmozSpider(scrapy.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):
for sel in response.xpath('//ul/li'):
title = sel.xpath('a/text()').extract()
link = sel.xpath('a/@href').extract()
desc = sel.xpath('text()').extract()
print title, link, desc

请使用手机"扫一扫"x

最新文章

  1. MBTI-性格测试
  2. Linux下JDK、Tomcat
  3. fiddler和xampp安装成功后,网站打不开的原因
  4. ICloud没有密码怎么注销?
  5. MongoDB学习笔记四:索引
  6. 德州扑克AI实现 TexasHoldem Poker
  7. soa vs cop
  8. 使用UltraEdit+BCC5.5搭建C语言学习环境(转)
  9. Multiple reportviewers on one page With reportviwer 11.0
  10. iOS中常用的正则表达式
  11. Ftp协议Socket实现
  12. VB.NET中网络编程所需组件WinHTTP的添加
  13. Java Web 单表操作
  14. 转 the best for wcf client
  15. 分布式全文搜索引擎ElasticSearch
  16. 使用iozone测试磁盘性能
  17. echarts3相关的各种定制化
  18. Android数据存储之SQLite
  19. thinkphp学习,蛋疼啊~新公司要弄这个。。。
  20. 【BZOJ】1029: [JSOI2007]建筑抢修(贪心)

热门文章

  1. 版本控制工具之git
  2. 分布式监控系统开发【day38】:监控trigger表结构设计(一)
  3. Java小知识点总结
  4. Matlab中hold on与hold off的用法
  5. java 使用for循环打印杨辉三角形
  6. HDU 1426(数独 DFS)
  7. 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法
  8. [浏览器事件循环] javaScript事件循环 EventLoop
  9. $m$ 整除 $10^k$ 的一个充分条件
  10. LinQ简单增、删、改、查