python xpath入门_python爬虫入门实战(三)!xpath 和 csv!
最近有小伙伴说正则表达式学不懂?那有什么替代方案呢?一起往下看吧!
在前两篇文章我们已经学了一些基本技巧。但是之前都是用正则表达式来解析内容的,可能有小伙伴对正则表达式不理解,于是乎,我找到一个相对好用的库来帮助我们解析内容。
配置环境
pyhton3 + requests 库 + lxml 库。在国内安装可能会卡住,可以参考以下指令,使用国内镜像。
pip3 install lxml -i http://pypi.douban.com/simple --trusted-host=pypi.douban.com
引入库。
import requests from multiprocessing.dummy
import Pool import lxml.html
import csv
xpath
首先我们可以清楚地看到,一个html文件是一种树状的结构。
有尖括号<>包起来的可以看成树的节点,成对出现的在内部的节点就是子节点。例如
是 的子节点。
在尖括号内的 a=xxx 中,a为属性,xxx为属性值。例如
成对的尖括号<>的文本叫做内容。例如 的内容为 白玉无冰 。
xpath就是根据树的结构获取信息的。/html/head/title/text() 返回的是内容 白玉无冰 | 明天进步一点点 | lamyoung 。 /html/body/div/@class 返回的是属性class的值 “container” 。
xpath还可以使用双斜杆 // 来查找所有的节点。 例如 //div[@class=”post-preview”] 是查找所有属性class为post-preview的div节点。
对于我们要爬取的目标链接和题目名字的参考代码如下:(关于requests的用法和解析参考白玉无冰:python爬虫入门实战!爬取博客文章标题和链接!zhuanlan.zhihu.com
)
def scrapy(index):
page_url = '';
if index>1:
page_url=f'page{index}/'
url=f'http://lamyoung.com/{page_url}';
print(url);
html=requests.get(url);
if html.status_code == 200:
html_bytes=html.content;
selector = lxml.html.fromstring(html_bytes);
#获取所有的节点
all_items=selector.xpath('//div[@class="post-preview"]')
write_content=[];
for item in all_items:
#获取链接
links = item.xpath('a/@href')
#获取标题
title=item.xpath('a/h2[@class="post-title"]/text()')
#标题去掉多余的空格
title_0=title[0].strip();
write_content.append({'title': title_0, 'link': f'http://lamyoung.com{links[0]}'});
return write_content
else:
return [];
接着使用多线程(详细解释参考白玉无冰:python爬虫入门实战(二)!多线程爬虫!zhuanlan.zhihu.com
)
pool = Pool(3);
orign_num=[x for x in range(1,10)];
result = pool.map(scrapy,orign_num);
csv
之前我们是用txt保存的,阅读起来非常不方便,这次我们用csv的格式保存,阅读时可以用excel打开,排版就好看多了。
一起看下在python中怎么使用吧!
with open('lamyoung_title_multi_xpath_out.csv', 'w', newline='') as csvfile:
fieldnames = ['title', 'link']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
#写入头
writer.writeheader()
for write_content in result:
for _content in write_content:
#写入内容
writer.writerow(_content);
一起看看最后的结果吧。
小结
这次主要介绍了xpath的基本用法(有没有比正则简单一点?)和csv保存。如有错误,欢迎斧正!如果我又学到好东西,会第一时间分享给大家的!欢迎关注获取最新更新哦!
我是白玉无冰,游戏开发小赤佬,也玩python和shellpython爬虫入门实战(三)不会正则怎么办?xpath分分钟搞定!mp.weixin.qq.com
python xpath入门_python爬虫入门实战(三)!xpath 和 csv!相关推荐
- 爬虫python入门_python爬虫入门教程有哪些?适合的只有这三个
python爬虫是现在包括以后一种很重要的获取数据的方式. 当然,也因为网络爬虫本身也很有趣,所以很多人了解过一次爬虫后,就产生了浓厚的兴趣. 但是,想学python爬虫的话,应该看什么python爬 ...
- 用python画写轮眼_Python爬虫入门-图片下载(写轮眼--Lyon)
Python小白最近入了爬虫的坑,但是一直到前天为止我会的只会简单的爬取网页上的文本信息,比如什么 豆瓣上的书评 ,知乎上红人的关注者 --一些很简单的爬虫.就在昨天我无聊闲暇在逛知乎偶然发现Lyon ...
- python小代码_Python爬虫入门有意思的小长代码
一段有意思的代码,有兴趣的可以研究研究. 需求 用户收到短信如:购买了电影票或者火车票机票之类的事件.然后app读取短信,解析短信,获取时间地点,然后后台自动建立一个备忘录,在事件开始前1小时提醒用户 ...
- python源码_Python爬虫入门之获取网页源码
爬虫,就是用程序代替人去访问网站,然后把网站上需要的东西拿下来:类似人输入网址,看到页面,然后复制粘贴,只是把这个过程自动化. 那么第一步就是去访问网站,要看到网站的页面,对程序来说也就是源码.笔者在 ...
- python很全的爬虫入门教程
python很全的爬虫入门教程 一.爬虫前的准备工作 首先,我们要知道什么是爬虫 1.什么是网络爬虫? 网络爬虫是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁 ...
- [python opencv 计算机视觉零基础到实战] 三、numpy与图像编辑
一.学习目标 了解图片的通道与数组结构 了解使用numpy创建一个图片 了解使用numpy对图片的一般操作方法 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的hell ...
- python编程理论篇_Python爬虫入门实战之猫眼电影数据抓取(理论篇)
前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...
- python爬虫入门实战争胜法_Python爬虫入门实战之猫眼电影数据抓取(理论篇)
前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...
- python爬虫动态加载_python爬虫入门实战(四)!爬取动态加载的页面!
今天的主题是爬取动态网页的经验分享,以cocos论坛为例子进行分享.(官方不会打我吧 ) 配置环境 为什么选择cocos论坛呢?因为自己在浏览论坛时,发现标题内容会随着滚动条的位置而动态添加. 环境: ...
最新文章
- Requested bean is currently in creation: Is there an unresolvable circular reference?
- Spring七中传播行为详解
- java连接摄像头_Java实现 海康摄像头抓拍图像(示例代码)
- vscode 预览图片 插件_真的动手写的VSCode的插件(图片浏览)之1
- C# 消息队列之MSMQ
- 用python解决生活问题_Python解决生活问题之闹钟程序的实现
- TensorFlow中查看checkpoint文件中的变量名和对应值
- Objective-C中的typedef枚举是什么?
- 正则表达式之非捕获组
- java - 建造者模式
- 华为开通api服务_入冬第一场技术盛宴!DevRun开发者沙龙华为云武汉专场举办
- ❤️ 爆肝三万字《数据仓库体系》轻松拿下字节offer ❤️【建议收藏】
- 算法套路学习之回溯算法-----子集,排列,组合等问题如何解决
- Win11电脑一边耳机没声音怎么办
- 一对一直播源码,一对一直播平台将普及我们的生活
- SPSS多元线性回归结果分析
- 相机技术--监控摄像机焦距与视角(视场大小)的具体选择
- dell服务器硬盘简测,小巧实用性能强 戴尔MD1120磁盘柜评测
- iOS 重力感应 学习1 陀螺仪 水平仪 指南针
- bugku web18 秋名山车神
热门文章
- c语言strncpy源码,C语言 - strcpy和strncpy的编程实现及总结
- 你知道ChatGPT吗,你真的了解ChatGPT吗
- 将从键盘上输入的一个字符串的每个单词的第一个字母转换为大写字母
- 神秘的角落之张东升做了Java老师,悲剧就这样开始了
- Bzoj 3730 震波 动态点分治
- 配电网粒子群算法实例
- 高中选科学计算机可以不学物理吗,新高考为什么特别重视物理学科,高中生要不要选物理科目?...
- 2020年 第十一届蓝桥杯 JavaB组 第一场 省赛总结
- 十天学会写PHP动态网站
- SQL_BOY的另类“CRUD”能力