requests项目实战--抓取百度热搜
时间:2022-07-23
本文章向大家介绍requests项目实战--抓取百度热搜,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、概述
目标url
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=123
注意:123是搜索关键字。这不是重点,因为必须要搜索,才能在网页右侧出现百度热搜。
需求
提取标题,链接,点击量。
环境说明
python 3.7
安装依赖
pip3 install requests
pip3 install lxml
二、抓取分析
XPath Helper插件
请确保谷歌浏览器安装了XPath Helper插件。
使用时,打开一个网页,点击右侧的图标
它会弹出一个黑框
左侧输入xpath语法,右侧显示匹配结果。
提取表格每一行
可以发现,百度热搜,是在一个table表格里面,class属性为:c-table opr-toplist1-table
表格的每一行,就是一条新闻信息。
获取每一行内容,xpath规则为:
//table[@class='c-table opr-toplist1-table']/tbody/tr
效果如下:
提取标题
标题是在一个a标签里面,class='opr-toplist1-cut',提取text()即可
xpath规则为:
//a[@class='opr-toplist1-cut']/text()
效果如下:
提取链接
链接也是在一个a标签里面,class='opr-toplist1-cut',提取href属性即可
xpath规则为:
//a[@class='opr-toplist1-cut']/@href
效果如下:
提取点击量
点击量在一个td里面,class='opr-toplist1-right opr-toplist1-right-hot',提取text()即可
xpath规则为:
//td[@class='opr-toplist1-right opr-toplist1-right-hot']/text()
效果如下:
三、完整代码
import requests
from lxml import etree
import time
import json
class Item:
id = None # id
title = None # 标题
url = None # 链接
hits = None # 点击量
class GetBaiduHotSearch:
def get_html(self, url):
try:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
if response.status_code == 200:
return response.text
return None
except Exception:
return None
def get_content(self, html):
items = []
# normalize-space 去空格,换行符
content = etree.HTML(html)
all_list = content.xpath("//table[@class='c-table opr-toplist1-table']/tbody/tr")
# 初始id
id = 0
for i in all_list:
item = Item()
id += 1 # 自增1
item.id = id
item.title = i.xpath("normalize-space(.//a[@class='opr-toplist1-cut']/text())")
item.url = 'https://www.baidu.com' + i.xpath("normalize-space(.//a[@class='opr-toplist1-cut']/@href)")
item.hits = i.xpath("normalize-space(.//td[@class='opr-toplist1-right opr-toplist1-right-hot']/text())")
items.append(item)
return items
def write_to_txt(self, items):
content_dict = {
'id': None,
'title': None,
'url': None,
'hits': None,
}
# 写入到文件中
with open('result.txt', 'a', encoding='utf-8') as f:
for item in items:
content_dict['id'] = item.id
content_dict['title'] = item.title
content_dict['url'] = item.url
content_dict['hits'] = item.hits
print(content_dict)
f.write(json.dumps(content_dict, ensure_ascii=False) + 'n')
def main(self):
url = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=123'
html = self.get_html(url)
items = self.get_content(html)
self.write_to_txt(items)
if __name__ == '__main__':
st = GetBaiduHotSearch().main()
运行结果:
文本结果:
文本参考链接:
http://www.py3study.com/Article/details/id/2213.html
- finecms如何调用多个指定栏目的内容
- finecms同时调用子栏目和子栏目的文章怎么操作
- 群体智能算法-黏菌寻找食物最优路线行为模拟 2
- thinkcmf安装教程与目录结构详解 快速上手版
- finecms如何批量替换文章中的关键词?
- dedecms批量修改文章为待审核稿件怎么操作
- 群体智能算法-黏菌寻找食物最优路线行为模拟
- finecms设置伪静态后分享到微信不能访问怎么处理
- composer安装其实可以很简单 两行命令就解决了
- 章神的私房菜之数据预处理
- 如何调用finecms指定栏目的描述关键词
- finecms栏目文章页seo设置
- Logistic回归实战篇之预测病马死亡率(一)
- DedeCMS后台500错误一种原因是不支持PHP5.3、5.4及以上版本
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 轻松搞懂elasticsearch概念
- 深入Golang调度器之GMP模型
- 深入Golang之sync.Pool详解
- 一次对电视盒子的漏洞分析
- MQ选型之RabbitMQ
- httprouter与 fasthttp 的性能对比
- Nmap 脚本研究
- Nmap NSE 库分析 >>> http
- Nmap NSE 库分析 >>> httpspider
- Nmap NSE 库分析 >>> url
- Go语言中的byte和rune区别、对比
- Nmap NSE 缺陷
- Golang服务器热重启、热升级、热更新(safe and graceful hot-restart/reload http server)详解
- Nmap NSE 库分析 >>> shortport
- Linux 后门系列之 python3 反弹shell & 隐藏后门