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编写暴力破解FTP密码小工具
Nov 19 Python
Python使用turtule画五角星的方法
Jul 09 Python
Python黑帽编程 3.4 跨越VLAN详解
Sep 28 Python
利用Python求阴影部分的面积实例代码
Dec 05 Python
Python3多目标赋值及共享引用注意事项
May 27 Python
python读取并定位excel数据坐标系详解
Jun 26 Python
python3常用的数据清洗方法(小结)
Oct 31 Python
opencv中图像叠加/图像融合/按位操作的实现
Apr 01 Python
python中对二维列表中一维列表的调用方法
Jun 07 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 Python
python 密码学示例——凯撒密码的实现
Sep 21 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
Mar 03 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 str_pad 函数用法简介
2009/07/11 PHP
PHP中读写文件实现代码
2011/10/20 PHP
深入php常用函数的使用汇总
2013/06/08 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
采用memcache在web集群中实现session的同步会话
2014/07/05 PHP
JQuery each打印JS对象的方法
2013/11/13 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
JavaScript中的prototype和constructor简明总结
2014/04/05 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
2015/12/03 Javascript
js实现新年倒计时效果
2015/12/10 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
2016/04/08 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
2016/05/17 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
详解操作虚拟dom模拟react视图渲染
2018/07/25 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
2018/12/10 Javascript
Jquery获取radio选中值实例总结
2019/01/17 jQuery
vue实现简易计算器功能
2021/01/20 Vue.js
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
好用的Python编辑器WingIDE的使用经验总结
2016/08/31 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
Python去除、替换字符串空格的处理方法
2018/04/01 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
2019/07/22 Python
JENNIFER BEHR官网:各种耳环和发饰
2020/06/07 全球购物
生产车间班组长岗位职责
2014/01/06 职场文书
市场安全管理制度
2014/01/26 职场文书
商场主管竞聘书
2014/03/31 职场文书
教师一岗双责责任书
2014/04/16 职场文书
委托书的写法
2014/09/16 职场文书
人工作失职检讨书
2015/05/05 职场文书
工作简历的自我评价
2019/05/16 职场文书
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL