利用python脚本(xpath)抓取数据
有人会问re和xpath是什么关系?如果你了解js与jquery,那么这个就很好理解了。
# -*- coding:utf-8 -*-
from lxml import etree html = """
<!DOCTYPE html>
<html>
<head lang="en">
<title>我的文档</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div id="cctv">
<div class="content">
<ul id="ul">
<li>NO.1</li>
<li>NO.2</li>
<li>NO.3</li>
</ul>
<ul id="ul2">
<li><span class="ctv">one</span></li>
<li><span class="ctv">two</span></li>
</ul>
</div>
<div id="url">
<a href="http://www.jd.com" title="jd">jd</a>
<a href="http://www.360buy.com" title="360buy">360buy</a>
</div>
</div>
</body>
</html>
"""
selector = etree.HTML(html) # ########### example 1 ############
# 这里使用id属性来定位哪个div和ul被匹配 使用text()获取文本内容
# 这里注意要层层匹配
# content = selector.xpath('//div[@id="cctv"]/div[@class="content"]/ul[@id="ul"]/li/text()')
# content = selector.xpath('//div[@id="cctv"]/div[@class="content"]/ul[@id="ul2"]/li/span[@class="ctv"]/text()')
content = selector.xpath('//a/@href') for i in content:
print(i)
print(u"************ 华丽分割符1 ************") # ########### example 2 ############
# 使用绝对路径定位a标签的title
con = selector.xpath('/html/body/div/a/@title')
# 使用相对路径定位 两者效果是一样的
con = selector.xpath('//a/@title')
print(len(con))
print(con[0], con[1])
print(u"************ 华丽分割符2 ************") # ########### example 3 ############
# starts-with 解决标签属性值以相同字符串开头的情况
con2 = selector.xpath('//span[starts-with(@class,"c")]/text()') # 这里使用starts-with方法提取div的id标签属性值开头为a的div标签
for i in con2:
print(i)
print(u"************ 华丽分割符3 ************") # string(.) 标签套标签
html2 = '''
<div id="a">
left
<span id="b">
right
<ul>
up
<li>down</li>
</ul>
east
</span>
west
</div>
''' # 下面是没有用string方法的输出
selector2 = etree.HTML(html2)
con3 = selector2.xpath('//div[@id="a"]/text()')
for i in con3:
print(i)
print(u"************ 华丽分割符4 ************") # 下面使用string方法的输出
data = selector2.xpath('//div[@id="a"]')
# info = data[0].xpath('string(.)').extract()[0]
info = data[0].xpath('string(.)')
con4 = info.replace('\n', '').replace(' ', '')
for i in con4:
# python 输出结果默认是\n,换行,将结尾替换掉即可实现不换行。
print(i, end='')
print("\r")
print(u"************ 华丽分割符5 ************") # ########### example 4 ############
html3 = """
<div>hello
<p>H</p>
</div>
<div>hehe</div>
"""
selector3 = etree.HTML(html3)
# 使用text()的方法来判别是哪个div标签
con5 = selector3.xpath('//div[text()="hehe"]/text()')
print(con5[0])
print(u"************ 华丽分割符6 ************") # ########### example 5 ############
html4 = """
<div id="utv">hello
<p>H</p>
<p>J</p>
<p>I</p>
</div>
<div>hehe</div>
"""
selector4 = etree.HTML(html4)
# 在XPath中可以使用多重过滤方法寻找标签,例如ul[3][@id=”a”] 这里使用【3】来寻找第三个ul标签 并且它的id属性值为a
con6 = selector4.xpath('//div/p[position()>=2]/text()')
for i in con6:
print(i)
print(u"************ 华丽分割符7 ************")
利用python脚本(xpath)抓取数据的更多相关文章
- 爬虫学习笔记(1)-- 利用Python从网页抓取数据
最近想从一个网站上下载资源,懒得一个个的点击下载了,想写一个爬虫把程序全部下载下来,在这里做一个简单的记录 Python的基础语法在这里就不多做叙述了,黑马程序员上有一个基础的视频教学,可以跟着学习一 ...
- 如何利用Python网络爬虫抓取微信朋友圈的动态(上)
今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...
- 利用Python网络爬虫抓取微信好友的签名及其可视化展示
前几天给大家分享了如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化,利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,以及利用Python网络爬虫抓取微信好友的所 ...
- 如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例
前几天给大家分享了利用Python网络爬虫抓取微信朋友圈的动态(上)和利用Python网络爬虫爬取微信朋友圈动态——附代码(下),并且对抓取到的数据进行了Python词云和wordart可视化,感兴趣 ...
- 利用Python网络爬虫抓取微信好友的所在省位和城市分布及其可视化
前几天给大家分享了如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,感兴趣的小伙伴可以点击链接进行查看.今天小编给大家介绍如何利用Python网络爬虫抓取微信好友的省位和城市,并且将 ...
- 利用python scrapy 框架抓取豆瓣小组数据
因为最近在找房子在豆瓣小组-上海租房上找,发现搜索困难,于是想利用爬虫将数据抓取. 顺便熟悉一下Python. 这边有scrapy 入门教程出处:http://www.cnblogs.com/txw1 ...
- Python爬虫处理抓取数据中文乱码问题
乱码原因:因为你的文件声明为utf-8,并且也应该是用utf-8的编码保存的源文件.但是windows的本地默认编码是cp936,也就是gbk编码,所以在控制台直接打印utf-8的字符串当然是乱码了. ...
- 怎么用Python写爬虫抓取网页数据
机器学习首先面临的一个问题就是准备数据,数据的来源大概有这么几种:公司积累数据,购买,交换,政府机构及企业公开的数据,通过爬虫从网上抓取.本篇介绍怎么写一个爬虫从网上抓取公开的数据. 很多语言都可以写 ...
- Python 3.6 抓取微博m站数据
Python 3.6 抓取微博m站数据 2019.05.01 更新内容 containerid 可以通过 "107603" + user_id 组装得到,无需请求个人信息获取: 优 ...
随机推荐
- cx_oracle访问处理oracle中文乱码问题
cx_oracle访问处理oracle中文乱码问题 问题描述 使用docker打包了centos镜像,编码为gbk,随后访问oracle出现了很多乱码.其原因自然是因为编码不一致,服务器为zhs16g ...
- 【资料下载区】【iCore4相关代码、资料下载地址】更新日期2018/02/24
[iCore4相关文档][更新中...] iCore4原理图(PDF)下载iCore4引脚注释(PDF)下载iCore4机械尺寸(PDF)下载 [iCore4相关例程代码][ARM] DEMO测试程序 ...
- 一致性 Hash 学习与实现
普通的 Hash 解决的是什么问题? 下图是一个普通的余数法构造的哈希表. 一般在编程中使用哈希表,某个 bucket 突然就没了的概率比较小,常见的是因为负载因子太大需要增加 bucket,然后 r ...
- dubbo的服务发现和注册如何实现
Dubbo通常我们是如何使用的? #================================================================================== ...
- .net reactor使用教程(一)——界面各功能说明(转)
概述:安装了.net reactor之后,可以在安装目录下找到帮助文档REACTOR_HELP.chm,目前没有中文版本,里面详细介绍了.net reactor的各功能及使用场景. 安装了.net ...
- Zookeeper系列六:服务器角色、序列化与通信协议、数据存储、zookeeper总结
一.服务器角色 1. Leader 1)事务请求的唯一调度者和处理者.保证事务处理的顺序性 事务请求:导致数据一致性的请求(数据发生改变).如删除一个节点.创建一个节点.设置节点数据,设置节点权限就是 ...
- jsp 连接access数据库
参考笔记:https://www.cnblogs.com/mthoutai/p/7278995.html
- SQL server 在附加数据库后,数据库总是变成了只读
1. 要把数据库文件的属性改了 右键点击两个文件的属性--安全--添加--立即查找--找everyone这个用户把他的权限都勾上 确定再附加就OK. 2. 在数据库管理器中对数据库点右键属性,然后切 ...
- Kindeditor视频上传问题处理
初始的时候,video这个标签kindeditor是不识别的,只要html处理或者全屏的时候,都会被排除掉.如果想要video存在,则需要设置属性filterMode :false 如果只是想要某个标 ...
- Elasticsearch学习之有用博客
推荐阅读:1.阿里:https://elasticsearch.cn/article/61712.滴滴:http://t.cn/EUNLkNU3.腾讯:http://t.cn/E4y9ylL4.携程: ...