当前位置: 首页 > news >正文

爬虫(二)使用urllib爬取百度贴吧的数据

下一期我就不用urllib来抓取数据了,因为urllib现在已经很少人用,大部分人用得是requests,requests也是基于底层urllib的一个模块。

首先我先来讲一下关于如何使用动态的UA!
动态UA就是指在自己创建的一个列表里随机选择一个UA当做请求浏览器的一个请求头.
我们先自定义一个列表User_Agents,然后将要添加的UA传进去.
UA大全

User_Agents = ['User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36','Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50','Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)']

传入进去之后我们使用random模块中的choice去随机选择UA

from random import  choice
headers = {'User-Agent': choice(User_Agents)}

至此一个动态UA就完成了!
接下来给大家献上爬取百度贴吧的代码
思路:我们知道要爬取有页数的url就要找出其中的规律
我们根据百度贴吧每页翻页的url可以得出基础的url是base_html='https://tieba.baidu.com/f?ie=utf-8&{}

from urllib.request import urlopen,Request
from random import  choice
from urllib.parse import quote,urlencode#定义一个得到url数据的函数
def get_html(url):User_Agents = ['User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36','Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50','Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)']headers = {'User-Agent': choice(User_Agents)}#伪装浏览器response = Request(url=url, headers=headers)#获取响应html = urlopen(response)#把读的到数据返回return html.read()#定义一个保存数据文件的函数
def save_html(file_name,html_bytes):with open(file_name,'wb') as rfile:rfile.write(html_bytes)rfile.close()
#定义一个主函数
def main():concent = input('请输入要下载的内容:')num=input('请输入要下载的页数:')base_html='https://tieba.baidu.com/f?ie=utf-8&{}'for pn in range(int(num)):arg={'pn':pn*50,'kw':concent}file_name='第'+str(pn+1)+'页'#将arg转码arg = urlencode(arg)print(f'正在下载{concent}的'+file_name)#base_html='https://tieba.baidu.com/f?ie=utf-8&{pn*50}html=base_html.format(arg)#得到网页里的数据html_bytes=get_html(html)save_html(file_name,html_bytes)#让程序跑起来
if __name__ == '__main__':main()print('下载完成')

这是爬取内容个每页的源代码,要获取相应的图片和内容还需要去解析提取。

看完的点个赞吧,喜欢的可以点点关注哦!
在这里插入图片描述

相关文章:

  • IDEA中的Run Dashboard
  • .net core 6 集成 elasticsearch 并 使用分词器
  • 学习方法分享
  • 关于C++的system()函数安全隐患问题
  • 虹科技术丨一文详解IO-Link Wireless技术如何影响工业无线自动化
  • 定义HarmonyOS IDL接口
  • 【MybatisPlus篇】查询条件设置(范围匹配 | 模糊匹配 | 空判定 | 包含性判定 | 分组 | 排序)
  • stack_queue:三个关键注意事项解析
  • Mac M1使用PD虚拟机运行win10弹出“内部版本已过期立即安装新的windows内部版本”
  • 手机云控制发电机组 有网络随时随地操控监控运行
  • 【劳德巴赫 Trace32 高阶系列 3 -- trace32 svf 文件操作命令】
  • 场效应管学习笔记
  • 基于SpringBoot Vue学生成绩管理系统
  • 【Kafka】服务器Broker与Controller详解
  • 【unity小技巧】FPS简单的射击换挡瞄准动画控制
  • #Java异常处理
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 2017-09-12 前端日报
  • AHK 中 = 和 == 等比较运算符的用法
  • canvas绘制圆角头像
  • CSS魔法堂:Absolute Positioning就这个样
  • exif信息对照
  • GitUp, 你不可错过的秀外慧中的git工具
  • idea + plantuml 画流程图
  • JavaScript HTML DOM
  • Javascript基础之Array数组API
  • JavaScript中的对象个人分享
  • Java面向对象及其三大特征
  • Js基础——数据类型之Null和Undefined
  • laravel5.5 视图共享数据
  • 聚类分析——Kmeans
  • 马上搞懂 GeoJSON
  • 你真的知道 == 和 equals 的区别吗?
  • 人脸识别最新开发经验demo
  • 入门到放弃node系列之Hello Word篇
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 智能合约开发环境搭建及Hello World合约
  • #if #elif #endif
  • #微信小程序:微信小程序常见的配置传值
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (04)odoo视图操作
  • (HAL库版)freeRTOS移植STMF103
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (分类)KNN算法- 参数调优
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (转)h264中avc和flv数据的解析
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转载)Google Chrome调试JS
  • **PHP二维数组遍历时同时赋值
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET Remoting学习笔记(三)信道
  • .net 使用ajax控件后如何调用前端脚本
  • .NET 中的轻量级线程安全