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 正则式使用心得
May 07 Python
Django中传递参数到URLconf的视图函数中的方法
Jul 18 Python
使用python3.5仿微软记事本notepad
Jun 15 Python
pandas 实现字典转换成DataFrame的方法
Jul 04 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
Feb 16 Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 Python
Python使用指定端口进行http请求的例子
Jul 25 Python
Python numpy.zero() 初始化矩阵实例
Nov 27 Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 Python
python实现语音常用度量方法的代码详解
May 25 Python
Python中OpenCV实现查找轮廓的实例
Jun 08 Python
Python字典的基础操作
Nov 01 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初学者头疼问题总结
2006/10/09 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
PHP常用工具类大全附全部代码下载
2015/12/07 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
js的with语句使用方法
2007/09/21 Javascript
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
2014/03/18 NodeJs
js实现飞入星星特效代码
2014/10/17 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
基于jquery实现多级菜单效果
2017/07/25 jQuery
mpvue微信小程序开发之实现一个弹幕评论
2019/11/24 Javascript
jQuery操作元素追加内容示例
2020/01/10 jQuery
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
vue3使用vue-count-to组件的实现
2020/12/25 Vue.js
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[26:50]2018完美盛典DOTA2表演赛
2018/12/17 DOTA
Python入门_学会创建并调用函数的方法
2017/05/16 Python
用Python解决x的n次方问题
2019/02/08 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
Python 3 实现定义跨模块的全局变量和使用教程
2019/07/07 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
幼儿教师思想汇报
2014/01/10 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
2015年五一劳动节演讲稿
2015/03/18 职场文书
教师节主持词开场白
2015/05/29 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
JS代码编译器Monaco使用方法
2021/06/11 Javascript
Redis Stream类型的使用详解
2021/11/11 Redis
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python
Win10 Anaconda安装python-pcl
2022/04/29 Servers