0
点赞
收藏
分享

微信扫一扫

python使用Xpath和Bs4爬取网易云热评墙





额,时间太快了,至于为什么这么说,是因为春节已经过完了。而小编却再也不能以大过年的为理由而不更文了。


偷懒了一个多月,有人私信问小编不更文的心情是怎么样的?那能告诉你真话吗?看下面的表情不就知道了。

python使用Xpath和Bs4爬取网易云热评墙_html

看了看日渐减少的粉丝量,还是不由得陷入了沉思,2021了,世界还是如此残酷。所以小编决定洗心革面,争取各位粉丝的宽大处理,言辞恳切的说到:亲,给个小心心吧!

python使用Xpath和Bs4爬取网易云热评墙_网易云_02

新的一年,有人问我2021的目标是什么,我想说当个诗人,因受到浅浅体诗歌的影响,突然感觉思如泉涌,犹如李白在世,人送外号“小李白”。来,长长眼:

大家

牛年

大吉大利


怎样,是不是妙笔生花,为了寻求灵感,小编也搜索了不少素材,发现了一个有趣的网站:网易云热评墙。


因此也引入今天的正文,爬取网易云热评,至于为什么要爬取这个网站,那是因为:我的故事只想讲给你听。

python使用Xpath和Bs4爬取网易云热评墙_网易云_03

本次代码分享,分别使用 Bs4 和 Xpath 两种方法,因之前也有介绍过这两个方面相关的教程,所以本次不做过多的详解,具体实现过程请看代码详情。

网址:https://www.musicbooks.cn/


Bs4代码:

# coding:utf-8
# __auth__ = "maiz"
# __date__ = "2021/2/21"
import requests
from bs4 import BeautifulSoup


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'
}
title_list = []
content_list = []




def req_data(req_url, header):
html = requests.get(url=url, headers=headers)
return html.text




def analy_data(data):
soup = BeautifulSoup(data, '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)




def get_total_page(data):
soup = BeautifulSoup(data, 'lxml')
pages = int(soup.find('a', title='最后页').get_text())
return pages




first_page = req_data(req_url=url, header=headers)


try:
pages = get_total_page(first_page)
except AttributeError:
pages = 1


for i in range(1, pages+1):
last_req = 'https://www.musicbooks.cn/page/{0}?s={1}'.format(i, keyname)
req_datas = req_data(req_url=last_req, header=headers)
analy_data(req_datas)


for title, content in zip(title_list, content_list):
print(title.text.strip())
print(content.text.strip())
print('-'*30)


Xpath代码:

# coding:utf-8
# __auth__ = "maiz"
# __date__ = "2021/2/21"
import requests
from lxml import etree
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'
}


title_list = []
content_list = []




def req_data(req_url, header):
html = requests.get(url=url, headers=headers)
return html.text




def analy_data(data):
soup = etree.HTML(data)
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)




def get_total_page(data):
soup = etree.HTML(data)
page = soup.xpath("//a[@title='最后页']/text()")
return int(page[0])




first_data = req_data(req_url=url, header=headers)


try:
pages = get_total_page(first_data)
except IndexError:
pages = 1


for i in range(1, pages+1):
last_req = 'https://www.musicbooks.cn/page/{0}?s={1}'.format(i, keyname)
req_datas = req_data(req_url=last_req, header=headers)
analy_data(req_datas)


for title, content in zip(title_list, content_list):
print(title.text.strip())
print(content.text.strip())
print('-'*30)





右击运行代码,即可成功爬取网易云热评墙的内容了。代码获取后台回复:”网易云热评墙“。


举报

相关推荐

0 条评论