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开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
Jul 27 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
Mar 02 Python
Python爬虫抓取代理IP并检验可用性的实例
May 07 Python
Python基于sklearn库的分类算法简单应用示例
Jul 09 Python
浅谈python连续赋值可能引发的错误
Nov 10 Python
python交换两个变量的值方法
Jan 12 Python
浅谈python图片处理Image和skimage的区别
Aug 04 Python
pytorch 可视化feature map的示例代码
Aug 20 Python
python3 字符串知识点学习笔记
Feb 08 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
Jun 23 Python
django rest framework 自定义返回方式
Jul 12 Python
Python暴力破解Mysql数据的示例
Nov 09 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
自己前几天写的无限分类类
2007/02/14 PHP
THINKPHP项目开发中的日志记录实例分析
2014/12/01 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
Angular2自定义分页组件
2017/04/19 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
node实现基于token的身份验证
2018/04/09 Javascript
node中的cookie的具体使用
2018/09/13 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
零基础写python爬虫之使用urllib2组件抓取网页内容
2014/11/04 Python
解决Python requests 报错方法集锦
2017/03/19 Python
人机交互程序 python实现人机对话
2017/11/14 Python
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
2018/12/24 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
python检测服务器端口代码实例
2019/08/31 Python
html5唤起app的方法
2017/11/30 HTML / CSS
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
this关键字的含义
2015/04/08 面试题
银行门卫岗位职责
2013/12/29 职场文书
音乐教学反思
2014/02/02 职场文书
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
文案策划岗位职责
2015/02/11 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
合作意向书怎么写
2019/06/24 职场文书
Jupyter notebook 更改文件打开的默认路径操作
2021/05/21 Python
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers