Python urllib 爬虫入门(2)

本文为Python urllib类库爬虫更入门的一些操作和爬虫实例及源码。

目录

模拟浏览器请求

简单模拟

设置随机user-agent

请求超时

HTTP请求类型

Get请求

Post请求

抓取网页动态请求

封装ajax请求

调用

循环调用

抓取小说

封装请求函数

把html写入本地分析

调用

正则匹配

网页内容

正则匹配设置

总结


模拟浏览器请求

简单模拟

通过f12查看相应请求的请求头信息,进行简单的模拟请求。

示例如下:

import urllib.requesturl = 'http://www.baidu.com'
# 模拟请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
}# 设置请求实体
req = urllib.request.Request(url, headers=headers)# 发起请求
response = urllib.request.urlopen(req)
data = response.read().decode('utf-8')
print(data)

设置随机user-agent

示例如下:

import random
import urllib.requesturl = 'http://www.baidu.com'
# 随机请求头
agentsList = ["Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
]
agentStr = random.choice(agentsList)
req = urllib.request.Request(url)
# 向请求体中添加随机User-Agent
req.add_header("User-Agent", agentStr)
response = urllib.request.urlopen(req)
data = response.read().decode('utf-8')
print(data)

请求超时

如果网页长时间未响应,设置超时时间,不在爬取。

通过timeout参数来设置,单位为秒。

示例如下:

import urllib.requestfor i in range(1, 10):try:req = urllib.request.urlopen('http://www.baidu.com', timeout=1)print(req.read().decode('utf-8'))except:print('已经超时,继续爬取下一个!')

HTTP请求类型

使用场景:进行客户端与服务端之间的消息传递时使用

GET:通过URL网址传递信息,可以直接在URL网址上添加要传递的信息

POST:可以向服务器提交数据,是一种比较流行的比较安全的数据传递方式

PUT:请求服务器存储一个资源,通常要指定存储的位置

DELETE:请求服务器删除一个资源BAD:请求获取对应的HTTP报头信息

OPTIONS:可以获取当前UTL所支持的请求类型

Get请求

特点:参数可直接在url中传输

优点:速度快,操作简单,主要用于接收数据。

缺点:不安全,并且传输的数据有限。

示例如下:

import urllib.requesturl = 'http://www.baidu.com'
req = urllib.request.urlopen(url)
data = req.read().decode('utf-8')
print(data)
print(type(data))

 

Post请求

特点:把参数进行打包,单独传输

优点:可承载数据量大,并且安全(当对服务器数据进行修改时建议使用post)

缺点:速度慢

示例如下:

import urllib.requesturl = 'http://localhost/2404/2.php'
# 将要发送的数据合成一个字典
data = {'username': '张三', 'pwd': '123456'}
# 对要发送的数据进行打包
postData = urllib.parse.urlencode(data).encode('utf-8')
# 请求体
req = urllib.request.Request(url, postData)
# 请求
req.add_header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0")
response = urllib.request.urlopen(req)
print(response.read().decode('utf-8'))

抓取网页动态请求

封装ajax请求

把抓取网页动态ajax请求处理封装为函数。

示例如下:

import json
import urllib.request
import ssldef ajaxRequest(page, pageSize):url = 'https://pre-api.tuishujun.com/api/listBookRank?rank_type=finish&first_type_id=1&second_type_id=7&page=' + str(page) + '&pageSize=' + str(pageSize)# 设置请求头headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0","Accept": "application/json, text/plain, */*","Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2","Cookie": "HWWAFSESTIME=1714019095289; HWWAFSESID=b1ddc79c3c2d6f806c"}req = urllib.request.Request(url, headers=headers)# 使用ssl创建未验证的上下文context = ssl._create_unverified_context()response = urllib.request.urlopen(req, context=context)jstr = response.read().decode('utf-8')data = json.loads(jstr)# print(data)# print(type(data))return data

调用

print(ajaxRequest(1, 10))

执行结果:

 

循环调用

加入到循环中,模拟请求10次。

示例如下:

# 循环调用
data = {}
for i in range(1, 10):data[i] = ajaxRequest(i, 10)print(data)

 

抓取小说

在爬虫获取网页内容后使用正则匹配获取相应内容。

本实例将请求一个小说网站首页的最热小说。

封装请求函数

示例如下:

import urllib.requestdef bookReptiles(url):# 设置请求头headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0","Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8","Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",}req = urllib.request.Request(url, headers=headers)response = urllib.request.urlopen(req)data = response.read().decode('utf-8')return data

把html写入本地分析

可在封装函数中最后返回前调用,写入本地文件中分析网页内容用于设置正则匹配规则。

示例如下:

def writeLocal(content):# 写入本地 分析结构path = './xiaoshuo.html'with open(path, 'w', encoding='utf-8') as f:f.write(content)

调用

设置好请求地址,并把请求地址传递给封装的函数即可。

示例如下:

url = '小说网站路径'
data = bookReptiles(url)

正则匹配

通过查看通过上文写入本地的网页内容,设置获取小说名字和描述的正则规则。

网页内容

 

正则匹配设置

经过多次验证后最终正则规则设置如下。

示例如下:

# 正则匹配
import re
reg = re.compile('<div class="item">(.*?)</dl>', re.S)
div_data = reg.findall(data)
dic = {}
for div in div_data:# 标题title_reg = re.compile('<dt><span>.*?</span><a href=".*?">(.*?)</a>', re.S)titles = title_reg.search(div)title = titles.group(1)# 描述desc_reg = re.compile('<dd>(.*?)<\/dd>', re.S)descs = desc_reg.search(div)desc = descs.group(1)dic[title] = descfor d2 in dic:print(d2, '=> ', dic[d2])

执行结果:

总结

本文为Python urllib类库爬虫更入门的一些操作和爬虫实例及源码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/5452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年Docker常用操作快速查询手册

目录 一、Linux系统上 Docker安装流程&#xff08;以ubuntu为例&#xff09; 一、卸载所有冲突的软件包 二、设置Docker的apt存储库&#xff08;这里使用的是阿里云软件源&#xff09; 三、直接安装最新版本的Docker 三、安装指定版本的Docker 四、验证Docker是否安装成功…

Linux 手动部署JDK21 环境

1、下载包&#xff08;我下载的是tar) https://www.oracle.com/cn/java/technologies/downloads/#java21 完成后进行上传 2、检查已有JDK&#xff0c;并删除&#xff08;我原有是jdk8&#xff09; rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps3、清理掉 profile中的j…

Mybatis-Plus扩展接口InnerInterceptor

InnerInterceptor 接口就是 MyBatis-Plus 提供的一个拦截器接口&#xff0c;用于实现一些常用的 SQL 处理逻辑&#xff0c;处理 MyBatis-Plus 的特定功能,例如PaginationInnerInterceptor、OptimisticLockerInnerInterceptor 等,都实现了 InnerInterceptor 接口&#xff0c;并添…

Vue项目打包APK----Vue发布App

时隔多年我又来跟新了&#xff0c;今天给大普家及下前端Vue傻瓜式发布App&#xff0c;话不多说直接上干货。 首先准备开发工具HBuilder X&#xff0c;去官网直接下载即可&#xff0c;算了直接给你们上地址吧HBuilderX-高效极客技巧。 打开软件&#xff0c;文件-->新建--&g…

【XR806开发板试用】基于XR806实现智能小车

一、实验功能&#xff1a; 1、 基于XR806实现WIFI连接路由器 2、 XR806设备创建TCP socket服务器&#xff0c;局域网内通过PC端TCP客服端连接XR806 TCP服务器进行指令控制小车运行&#xff08;指令&#xff21;&#xff1a;前进、&#xff22;&#xff1a;后退、&#xff23;&…

实验15 MVC

二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握MVC的用法。 三、源代码以及执行结果截图&#xff1a; inputMenu.jsp&#xff1a; <% page contentType"text/html" %> <% page pageEncoding "utf-8" %> &…

Nginx配置Https缺少SSL模块

1、Linux下Nginx配置https nginx下载和安装此处就忽略&#xff0c;可自行百度 1.1、配置https 打开nginx配置文件 vim /opt/app/nginx/conf/nginx.conf相关https配置 server {listen 443 ssl; #开放端口server_name echarts.net;#域名#redirect to https#ssl on; #旧版#ssl证…

C语言-嵌入式-STM32:FreeRTOS说明和详解

Free即免费的&#xff0c;RTOS的全称是Real time operating system&#xff0c;中文就是实时操作系统。 注意&#xff1a;RTOS不是指某一个确定的系统&#xff0c;而是指一类操作系统。比如&#xff1a;uc/OS&#xff0c;FreeRTOS&#xff0c;RTX&#xff0c;RT-Thread 等这些都…

应用监控(Prometheus + Grafana)

可用于应用监控的系统有很多&#xff0c;有的需要埋点(切面)、有的需要配置Agent(字节码增强)。现在使用另外一个监控系统 —— Grafana。 Grafana 监控面板 这套监控主要用到了 SpringBoot Actuator Prometheus Grafana 三个模块组合的起来使用的监控。非常轻量好扩展使用。…

JDK-Mac系统和Windows系统安装及Java版本新特性(java9 - java19)

过去岁月不可追&#xff0c; 未来日子要珍惜。 莫愁身外七八事&#xff0c; 且尽眼前两三杯。 当你纠结于过去之时&#xff0c;懊恼与悔恨难免会让你陷入不欢。 当你忧愁于未来之时&#xff0c;未知与不安又会逐渐侵蚀你的心灵。 勿要纠结于过去&#xff0c;勿要忧愁于未来&…

使 Elasticsearch 和 Lucene 成为最佳向量数据库:速度提高 8 倍,效率提高 32 倍

作者&#xff1a;来自 Elastic Mayya Sharipova, Benjamin Trent, Jim Ferenczi Elasticsearch 和 Lucene 成绩单&#xff1a;值得注意的速度和效率投资 我们 Elastic 的使命是将 Apache Lucene 打造成最佳的向量数据库&#xff0c;并继续提升 Elasticsearch 作为搜索和 RAG&a…

透视天气:数据可视化的新视角

数据可视化在天气方面能够为我们带来极大的帮助。天气是人类生活中一个重要的因素&#xff0c;对于农业、交通、航空、能源等各个领域都有着重要的影响。而数据可视化技术通过将复杂的天气数据转化为直观、易懂的图表、图像或地图等形式&#xff0c;为我们提供了更深入、更全面…

如何提升制造设备文件汇集的可靠性和安全性?

制造设备文件汇集通常指的是将与制造设备相关的各种文档和资料进行整理和归档的过程。这些文件可能包括但不限于&#xff1a; 生产数据&#xff1a;包括生产计划、订单信息、生产进度等。 设计文件&#xff1a;如CAD图纸、设计蓝图、产品模型等。 工艺参数&#xff1a;用于指…

PaddlePaddle与OpenMMLab

产品全景_飞桨产品-飞桨PaddlePaddle OpenMMLab算法应用平台

AnyMP4 Blu-ray Ripper for Mac:您的蓝光影音转换专家

AnyMP4 Blu-ray Ripper for Mac&#xff0c;一款功能强大的蓝光影音转换软件&#xff0c;让您的蓝光内容焕发新生。 AnyMP4 Blu-ray Ripper for Macv9.0.58激活版下载 它采用最高效的解决方案&#xff0c;将蓝光光盘翻录为任何您想要的视频格式&#xff0c;无论是MP4、MKV还是A…

【Excel】excel计算相关性系数R、纳什效率系数NSE、Kling-Gupta系数KGE

对于采用的数据&#xff1a; B2:B10958是观测值的所在范围 C2:C10958是模型计算值的所在范围 一、相关系数R是用来衡量两个变量之间线性关系强度和方向的统计量。在水文学和气象学中&#xff0c;常用的相关系数是皮尔逊相关系数&#xff08;Pearson correlation coefficient&am…

智能体可靠性的革命性提升,揭秘知识工程领域的参考架构新篇章

引言&#xff1a;知识工程的演变与重要性 知识工程&#xff08;Knowledge Engineering&#xff0c;KE&#xff09;是一个涉及激发、捕获、概念化和形式化知识以用于信息系统的过程。自计算机科学和人工智能&#xff08;AI&#xff09;历史以来&#xff0c;知识工程的工作流程因…

【数据结构(邓俊辉)学习笔记】向量05——排序器

文章目录 0. 概述1.统一入口2. 起泡排序2.1 起泡排序&#xff08;基础版&#xff09;2.1.1 算法分析2.1.2 算法实现2.1.3 重复元素与稳定性2.1.4 复杂度分析 3. 归并排序3.1 有序向量的二路归并3.2 分治策略3.3 实例3.4 二路归并接口的实现3.5 归并时间3.6 排序时间 4.综合评价…

基于Matlab使用深度学习的多曝光图像融合

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在图像处理领域&#xff0c;多曝光图像融合技术是一种重要的技术&#xff0c;它可以将不同曝光条件下…

备忘录模式(行为型)

目录 一、前言 二、备忘录模式 三、总结 一、前言 备忘录模式(Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;这样可以在之后将该对象恢复到原…