文章目录
- 专栏导读
- 背景
- 结果预览
- 1、爬取页面分析
- 2、通过返回数据发现适合利用lxml+xpath
- 3、继续分析【小说榜、电影榜、电视剧榜、汽车榜、游戏榜】
- 4、完整代码
- 总结
专栏导读
🔥🔥本文已收录于《Python基础篇爬虫》
🉑🉑本专栏专门针对于有爬虫基础
准备的一套基础教学,轻松掌握Python爬虫,欢迎各位同学订阅,专栏订阅地址:点我直达
🤞🤞此外如果您已工作,如需利用Python解决办公中常见的问题,欢迎订阅《Python办公自动化》专栏
,订阅地址:点我直达
的
🔺🔺此外《Python30天从入门到熟练》专栏已上线,欢迎大家订阅,订阅地址:点我直达
背景
-
我想利用爬虫获取【百度热搜页面】的全部热搜、包括
-
1、热搜榜
-
2、小说榜
-
3、电影榜
-
4、电视剧榜
-
5、汽车榜
-
6、游戏榜
结果预览
1、爬取页面分析
爬取URL:https://top.baidu.com/board?
爬取方法:GET
返回数据:整个页面(TXT)
'''
@Project :项目名称
@File :程序.py
@IDE :PyCharm
@Author :一晌小贪欢
@Date :2024/05/27 11:27
'''import json
import openpyxl
import requests
from lxml import etreeurl = 'https://top.baidu.com/board?'
cookies = {'Cookie': '填入自己的Cookie'
}headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',}params = {'platform': 'pc','tab': 'homepage','sa': 'pc_index_homepage_all',
}res_data = requests.get(url=url, params=params, headers=headers, cookies=cookies)
print(res_data.text)
2、通过返回数据发现适合利用lxml+xpath
-
我们发现返回的数据是整个网页,其中每一种热搜均在其页面中
-
热搜榜、小说榜、电影榜、电视剧榜、汽车榜、游戏榜、存在如下div中 ↓
-
获取该【div】(利用lxml+xpath)
-
通过分析得:
//div[@id="sanRoot"]//div[@class="list_1EDla"]//a//div[@class="c-single-text-ellipsis"]
-
通过分析发现xpath没问题,但是获的值重复了,所以利用
range(0,len(hot_search),2)
,只要获取一个就行了
3、继续分析【小说榜、电影榜、电视剧榜、汽车榜、游戏榜】
-
我们发现这几个排行榜,居然使用一个xpath就可以
-
通过分析得:
//div[@id="sanRoot"]//div[@class="list_1s-Px"]//a[@class="title_ZsyAw"]
-
【热搜指数】通过分析得:
//div[@id="sanRoot"]//div[@class="list_1s-Px"]//div[@class="exponent_QjyjZ"]//span
-
【热搜分类】通过分析得:
//div[@id="sanRoot"]//div[@class="list_1s-Px"]//div[@class="desc_2YkQx"]
-
这三个长度都是【50】
-
所以写进列表,进行以10个元素拆分,然后分别写进Excel
4、完整代码
'''
@Project :百度热搜爬虫
@File :程序.py
@IDE :PyCharm
@Author :一晌小贪欢
@Date :2024/05/27 11:27
'''import json
import openpyxl
import requests
from lxml import etreewb = openpyxl.Workbook()
ws = wb.active
ws.title = '热搜榜'
ws.append(['热搜榜'])
ws2 = wb.create_sheet('小说榜')
ws2.append(['小说榜'])
ws3 = wb.create_sheet('电影榜')
ws3.append(['电影榜'])
ws4 = wb.create_sheet('电视剧榜')
ws4.append(['电视剧榜'])
ws5 = wb.create_sheet('汽车榜')
ws5.append(['汽车榜'])
ws6 = wb.create_sheet('游戏榜')
ws6.append(['游戏榜'])url = 'https://top.baidu.com/board?'
cookies = {'填入自己的Cookie'
}headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',}params = {'platform': 'pc','tab': 'homepage','sa': 'pc_index_homepage_all',
}res_data = requests.get(url=url, params=params, headers=headers, cookies=cookies)
tree = etree.HTML(res_data.text)'''
热搜榜
'''hot_search = tree.xpath('//div[@id="sanRoot"]//div[@class="list_1EDla"]//a//div[@class="c-single-text-ellipsis"]')
print(len(hot_search))for i in range(0,len(hot_search),2):print(hot_search[i].text)ws.append([hot_search[i].text])
'''
小说榜、电影榜、电视剧榜、汽车榜、游戏榜
'''
hot_search2 = tree.xpath('//div[@id="sanRoot"]//div[@class="list_1s-Px"]//a[@class="title_ZsyAw"]')
hot_search3 = tree.xpath('//div[@id="sanRoot"]//div[@class="list_1s-Px"]//div[@class="exponent_QjyjZ"]//span')
type_ = tree.xpath('//div[@id="sanRoot"]//div[@class="list_1s-Px"]//div[@class="desc_2YkQx"]')
count = 0a_list = []for i in range(len(hot_search2)):a_list.append(hot_search2[i].text+' '+hot_search3[i].text+' '+type_[i].text)
a_list = [a_list[i:i+10] for i in range(0, len(a_list), 10)]
count = 0
for i in a_list:count+=1if count == 1:for j in i:ws2.append([j])elif count == 2:for j in i:ws3.append([j])elif count == 3:for j in i:ws4.append([j])elif count == 4:for j in i:ws5.append([j])elif count == 5:for j in i:ws6.append([j])wb.save("./整体热搜榜.xlsx")
总结
-
希望对初学者有帮助
-
致力于办公自动化的小小程序员一枚
-
希望能得到大家的【一个免费关注】!感谢
-
求个 🤞 关注 🤞
-
此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏
-
求个 ❤️ 喜欢 ❤️
-
此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏
-
求个 👍 收藏 👍
-
此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏