Python爬虫框架Scrapy基本用法入门教程


Posted in Python onJuly 26, 2018

本文实例讲述了Python爬虫框架Scrapy基本用法。分享给大家供大家参考,具体如下:

Xpath

<html>
<head>
  <title>标题</title>
</head>
<body>
  <h2>二级标题</h2>
  <p>爬虫1</p>
  <p>爬虫2</p>
</body>
</html>

在上述html代码中,我要获取h2的内容,我们可以使用以下代码进行获取:

info = response.xpath("/html/body/h2/text()")

可以看出/html/body/h2为内容的层次结构,text()则是获取h2标签的内容。//p获取所有p标签。获取带具体属性的标签://标签[@属性="属性值"]

<div class="hide"></div>

获取class为hide的div标签

div[@class="hide"]

再比如,我们在谷歌Chrome浏览器上的Console界面使用$x['//h2']命令获取页面中的h2元素信息:

Python爬虫框架Scrapy基本用法入门教程

xmlfeed模板

创建一个xmlfeed模板的爬虫

scrapy genspider -t xmlfeed abc iqianyue.com

核心代码:

from scrapy.spiders import XMLFeedSpider
class AbcSpider(XMLFeedSpider):
  name = 'abc'
  start_urls = ['http://yum.iqianyue.com/weisuenbook/pyspd/part12/test.xml']
  iterator = 'iternodes' # 迭代器,默认为iternodes,是一个基于正则表达式的高性能迭代器。除了iternodes,还有“html”和“xml”
  itertag = 'person' # 设置从哪个节点(标签)开始迭代
  # parse_node会在节点与提供的标签名相符时自动调用
  def parse_node(self, response, selector):
    i = {}
    xpath = "/person/email/text()"
    info = selector.xpath(xpath).extract()
    print(info)
    return i

csvfeed模板

创建一个csvfeed模板的爬虫

scrapy genspider -t csvfeed csvspider iqianyue.com

核心代码

from scrapy.spiders import CSVFeedSpider
class CsvspiderSpider(CSVFeedSpider):
  name = 'csvspider'
  allowed_domains = ['iqianyue.com']
  start_urls = ['http://yum.iqianyue.com/weisuenbook/pyspd/part12/mydata.csv']
  # headers 主要存放csv文件中包含的用于提取字段的信息列表
  headers = ['name', 'sex', 'addr', 'email']
  # delimiter 字段之间的间隔
  delimiter = ','
  def parse_row(self, response, row):
    i = {}
    name = row["name"]
    sex = row["sex"]
    addr = row["addr"]
    email = row["email"]
    print(name,sex,addr,email)
    #i['url'] = row['url']
    #i['name'] = row['name']
    #i['description'] = row['description']
    return i

crawlfeed模板

创建一个crawlfeed模板的爬虫

scrapy genspider -t crawlfeed crawlspider sohu.com

核心代码

class CrawlspiderSpider(CrawlSpider):
  name = 'crawlspider'
  allowed_domains = ['sohu.com']
  start_urls = ['http://sohu.com/']
  rules = (
    Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),
  )
  def parse_item(self, response):
    i = {}
    #i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()
    #i['name'] = response.xpath('//div[@id="name"]').extract()
    #i['description'] = response.xpath('//div[@id="description"]').extract()
    return i

上面代码rules部分中的LinkExtractor为连接提取器。

LinkExtractor中对应的参数及含义

参数名 参数含义
allow 提取符合正则表达式的链接
deny 不提取符合正则表达式的链接
restrict_xpaths 使用XPath表达式与allow共同作用提取同时符合对应XPath表达式和对应正则表达式的链接
allow_domains 允许提取的域名,比如我们想只提取某个域名下的链接时会用到
deny_domains 进制提取的域名

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
使用python删除nginx缓存文件示例(python文件操作)
Mar 26 Python
Python Web框架Flask中使用七牛云存储实例
Feb 08 Python
python删除列表中重复记录的方法
Apr 28 Python
Python实现的爬虫刷回复功能示例
Jun 07 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
Dec 30 Python
在python里从协程返回一个值的示例
Feb 19 Python
Python3数字求和的实例
Feb 19 Python
Tensorflow实现神经网络拟合线性回归
Jul 19 Python
python matplotlib饼状图参数及用法解析
Nov 04 Python
pytorch 数据处理:定义自己的数据集合实例
Dec 31 Python
Pycharm的Available Packages为空的解决方法
Sep 18 Python
Python SQLAlchemy库的使用方法
Oct 13 Python
Tensorflow 合并通道及加载子模型的方法
Jul 26 #Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 26 #Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
Jul 26 #Python
kaggle+mnist实现手写字体识别
Jul 26 #Python
解决tensorflow模型参数保存和加载的问题
Jul 26 #Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
Jul 26 #Python
Flask web开发处理POST请求实现(登录案例)
Jul 26 #Python
You might like
php中的常用魔术方法总结
2013/08/02 PHP
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
Laravel框架实现的使用smtp发送邮件功能示例
2019/03/12 PHP
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
简易js代码实现计算器操作
2013/04/15 Javascript
jquery改变disabled的boolean状态的三种方法
2013/12/13 Javascript
jquery.post用法之type设置问题
2014/02/24 Javascript
JS中字符串trim()使用示例
2015/05/26 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
js表单提交和submit提交的区别实例分析
2015/12/10 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
微信小程序 定义全局数据、函数复用、模版等详细介绍
2016/10/27 Javascript
JavaScript实现简单音乐播放器
2020/04/17 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
python3学习之Splash的安装与实例教程
2018/07/09 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
解决os.path.isdir() 判断文件夹却返回false的问题
2019/11/29 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
HTML利用九宫格原理进行网页布局
2020/03/13 HTML / CSS
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
上海某公司.net方向笔试题
2014/09/14 面试题
.NET笔试题(20个问题)
2016/02/02 面试题
公司募捐倡议书
2014/05/14 职场文书
教师党员岗位承诺书
2014/05/29 职场文书
电子商务求职信
2014/06/15 职场文书
入股协议书范本
2014/11/01 职场文书
实习护士自荐信
2015/03/25 职场文书
公司催款律师函
2015/05/27 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书
MySql存储过程之逻辑判断和条件控制
2021/05/26 MySQL
详细分析PHP7与PHP5区别
2021/06/26 PHP
Python使用永中文档转换服务
2022/05/06 Python