吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4547|回复: 26
收起左侧

[学习记录] 【笔记】python自学笔记(爬虫篇)——网易云热评

   关闭 [复制链接]
qianshang666 发表于 2021-2-17 23:55
本帖最后由 qianshang666 于 2021-2-18 00:05 编辑

一.前言
今天其实主要想介绍xpath语法,上一节我说了一下bs4解析,有不少兄弟说xpath语法更方便,其实我觉得两者各有优劣,包括正则表达式,这三者可以择优选择,最好选择自己熟悉的使用,不管是什么,能取到我们需要的数据才是好的,过几天会开个番外篇,包括tkinter和js解密部分

二.xpath语法
xpath语法常用来提取xml和html数据,通过xpath语法获取网页中我们想要的内容,其实xml和html的数据可以看成一个树形的结构,每个树有很多树枝(树枝称为节点),xpath语法提供了在树中查找不同节点的能力
[HTML] 纯文本查看 复制代码
<html>
<head>
<body>
##代码中<html>,<head>,<body>都可以看成是一个个节点,xpath语法可以快速的定位到html代码中的节点
</body>
</head>
</html>

1.// 代表从全局下,也就是从所有节点中,或者说从所有子孙元素中去查找满足条件的数据
如://div   表示从所有子孙元素中查找满足的条件
注意:xpath语法返回的是一个列表,所以到时候我们需要用循环的方式进行遍历
2.@代表选取属性
如://a/@href    表示获取所有a标签的href属性
3.点(.)代表从当前节点选取
如:.//a/@href   表示获取当前a标签的href属性
4./代表从根节点选取
如:/div    表示从根节点选取div节点
5.谓语:谓语用来查找某个特定的节点,也就是帮助我们精确的定位到某个节点
如://div[@class='hello']   表示在全局下查找class等于hello的div节点

三.网易云热评实战
1.明确目标,我们不进行全部内容的爬取,而是指定关键字查找
1.png
2.,按下键盘上的f12,通过关键字查找,我们找到数据包,然后查看preview,发现有数据,我们就明确了我们要访问的url,也表示我们可以使用xpath语句和bs4
2-1.png
2-2.png
3.我们按一下开发者模式左上角的箭头,点击网页,找到Element定位,这样我们就找到了标题和内容的地方了
3-1.png
3-2.png
4.接下来就是按下键盘上的CTRL+F,打开搜索框,分别定位标题和内容,大家可以看看这两个语法,自己动手熟练一下
4-1.png
4-2.png
5.接下来就是说一下xpath的用法,固定的语法格式
[Python] 纯文本查看 复制代码
html=etree.HTML(text)   #text这部分必须是文本,如果是html,需要加.text
ul=html.xpath("")   #括号内放的就是我们写的xpath语句,需要用引号引起来

6.具体思路我已经说完了,接下来我就直接放代码了,我分别发一下bs4解析的和xpath解析的代码,其实这两段代码,只有三行不同,其他都是一模一样
(1)bs4语法代码
[Python] 纯文本查看 复制代码
import requests
from bs4 import BeautifulSoup
from lxml import etree    #xpath要用到的库
import re
keyname = input('请输入你要查找的数据:')
url = 'https://www.musicbooks.cn/?s=' + keyname
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
}
html = requests.get(url = url,headers = headers)

title_list = []
content_list = []
soup = BeautifulSoup(html.text,'lxml')
titles = soup.select('article.meta header a h2')
contents = soup.select('article.meta main p')
for title in titles:
    title_list.append(title)
for content in contents:
    content_list.append(content)
for title,content in zip(title_list,content_list):
    print(title.text.strip())
    print(content.text.strip())
    print('-'*30)

(2)xpath代码
[Python] 纯文本查看 复制代码
import requests
from bs4 import BeautifulSoup
from lxml import etree    #xpath要用到的库
import re
keyname = input('请输入你要查找的数据:')
url = 'https://www.musicbooks.cn/?s=' + keyname
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
}
html = requests.get(url = url,headers = headers)

title_list = []
content_list = []
soup = etree.HTML(html.text)
titles = soup.xpath('//div/article/header/a/h2')
contents = soup.xpath('//div/article/main/p')
for title in titles:
    title_list.append(title)
for content in contents:
    content_list.append(content)
for title,content in zip(title_list,content_list):
    print(title.text.strip())
    print(content.text.strip())
    print('-'*30)

7.我用tkinter做了一个简单的GUI,效果图我发出来大家看看,这个会在后续开展的番外篇详细说明的
7.png

四.序列解包
有的朋友可能已经发现上面的代码中有这样一行:for title,content in zip(title_list,content_list):
我举个例子给大家看看,大家就很容易理解了
8.png
大家就可以理解对按照顺序对列表进行遍历,并且对其进行一些数据清洗操作

后言:最后说一下,我为什么写xpath语法不直接右键单击copy——>copy xpath,这样只能找到当前那一条,还要自己再改一下,所以我建议大家还是自己写比较好,当然,对于精通xpath语法的就当我没说,哈哈,感谢大家的观看

免费评分

参与人数 6吾爱币 +6 热心值 +4 收起 理由
泽哥 + 1 + 1 我很赞同!
瑾Cheng + 1 谢谢@Thanks!
尼古拉·特斯拉 + 1 + 1 热心回复!
kibaya + 1 谢谢@Thanks!
叫我小王叔叔 + 1 + 1 谢谢@Thanks!
o824 + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

  • · 源码|主题: 47, 订阅: 1

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wsdhgd 发表于 2021-2-18 00:06
谢谢分享
zhengxinjun 发表于 2021-2-18 00:22
tomcruise 发表于 2021-2-18 00:36
 楼主| qianshang666 发表于 2021-2-18 06:32
zhengxinjun 发表于 2021-2-18 00:22
我现在卡在GUI了 不知道咋衔接

其实很简单,就是绑定事件
lncyq 发表于 2021-2-18 08:11
做个记号,有空时看一下,虽然不懂,但还是很想学一学
zz1181 发表于 2021-2-18 08:21
收藏学习,谢谢分享
o824 发表于 2021-2-18 08:33
值得收藏
sutramusic 发表于 2021-2-18 08:43
看来需要门槛,好像没有太多人关注,支持一下。谢谢分享!
CCQc 发表于 2021-2-18 09:05
学习,学习。感谢大佬分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-16 07:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表