使用 Python 爬取网页数据

article/2025/10/22 15:57:56

在需要过去一些网页上的信息的时候,使用 Python 写爬虫来爬取十分方便。

1. 使用 urllib.request 获取网页

urllib 是 Python 內建的 HTTP 库, 使用 urllib 可以只需要很简单的步骤就能高效采集数据; 配合 Beautiful 等 HTML 解析库, 可以编写出用于采集网络数据的大型爬虫;

注: 示例代码使用Python3编写; urllib 是 Python2 中 urllib 和 urllib2 两个库合并而来, Python2 中的 urllib2 对应 Python3中的 urllib.request
简单的示例:

import urllib.request                    # 引入urllib.requestresponse =  urllib.request.urlopen('http://www.zhihu.com')            # 打开URL
html = response.read()            # 读取内容
html = html.decode('utf-8')            # 解码
print(html)

2. 伪造请求头信息

有时爬虫发起的请求会被服务器拒绝, 这时就需要将爬虫伪装成人类用户的浏览器, 这通常通过伪造请求头信息实现, 如:

import urllib.request#定义保存函数def saveFile(data):path = "E:\\projects\\Spider\\02_douban.out"f = open(path,'wb')f.write(data)f.close()#网址url = "https://www.douban.com/"headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/51.0.2704.63 Safari/537.36'}req = urllib.request.Request(url=url,headers=headers)res = urllib.request.urlopen(req)data = res.read()#也可以把爬取的内容保存到文件中saveFile(data)data = data.decode('utf-8')#打印抓取的内容print(data)#打印爬取网页的各类信息print(type(res))print(res.geturl())print(res.info())print(res.getcode())

结果:
在这里插入图片描述伪造请求头可以用谷歌的插件Chrome UA Spoofer
在这里插入图片描述
右键点击选项便有许多人类用户的浏览器可以伪造,直接复制就行
在这里插入图片描述

3. 伪造请求主体

在爬取某一些网站时, 需要向服务器 POST 数据, 这时就需要伪造请求主体;

为了实现有道词典在线翻译脚本, 在 Chrome 中打开开发工具, 在 Network 下找到方法为 POST 的请求, 观察数据可以发现请求主体中的 ‘ i ‘ 为经过 URL 编码的需要翻译的内容, 因此可以伪造请求主体, 如:

import urllib.request
import urllib.parse
import jsonwhile True:content = input('请输入要翻译的内容:')if content == 'exit!':breakurl='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null'# 请求主体data = {}data['type'] = "AUTO"data['i'] = contentdata['doctype'] = "json"data['xmlVersion'] = "1.8"data['keyfrom'] = "fanyi.web"data['ue'] = "UTF-8"data['action'] = "FY_BY_CLICKBUTTON"data['typoResult'] = "true"data = urllib.parse.urlencode(data).encode('utf-8')head = {}head['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Firefox/45.0'req = urllib.request.Request(url,data,head)            # 伪造请求头和请求主体response = urllib.request.urlopen(req)html = response.read().decode('utf-8')target = json.loads(html)print('翻译结果: ',(target['translateResult'][0][0]['tgt']))

也可以使用 add_header() 方法伪造请求头, 如:

import urllib.request
import urllib.parse
import jsonwhile True:content = input('请输入要翻译的内容(exit!):')if content == 'exit!':breakurl = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null'# 请求主体data = {}data['type'] = "AUTO"data['i'] = contentdata['doctype'] = "json"data['xmlVersion'] = "1.8"data['keyfrom'] = "fanyi.web"data['ue'] = "UTF-8"data['action'] = "FY_BY_CLICKBUTTON"data['typoResult'] = "true"data = urllib.parse.urlencode(data).encode('utf-8')req = urllib.request.Request(url,data)req.add_header('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Firefox/45.0')response = urllib.request.urlopen(req)html=response.read().decode('utf-8')target = json.loads(html)print('翻译结果: ',(target['translateResult'][0][0]['tgt']))

4. 使用代理IP

为了避免爬虫采集过于频繁导致的IP被封的问题, 可以使用代理IP, 如:

# 参数是一个字典{'类型':'代理ip:端口号'}
proxy_support = urllib.request.ProxyHandler({'type': 'ip:port'})# 定制一个opener
opener = urllib.request.build_opener(proxy_support)# 安装opener
urllib.request.install_opener(opener)#调用opener
opener.open(url)

注: 使用爬虫过于频繁的访问目标站点会占用服务器大量资源, 大规模分布式爬虫集中爬取某一站点甚至相当于对该站点发起DDOS攻击; 因此, 使用爬虫爬取数据时应该合理安排爬取频率和时间; 如: 在服务器相对空闲的时间 ( 如: 凌晨 ) 进行爬取, 完成一次爬取任务后暂停一段时间等;

5. 检测网页的编码方式

尽管大多数网页都是用 UTF-8 编码, 但有时候会遇到使用其他编码方式的网页, 因此必须知道网页的编码方式才能正确的对爬取的页面进行解码;

chardet 是 python 的一个第三方模块, 使用 chardet 可以自动检测网页的编码方式;

安装 chardet : pip install charest
使用:

import chardet
url = 'http://www,baidu.com'
html = urllib.request.urlopen(url).read()>>> chardet.detect(html)
{'confidence': 0.99, 'encoding': 'utf-8'}

6. 获得跳转链接

有时网页一个页面需要在原始 URL 的基础上进行一次甚至多次跳转才能最终到达目的页面, 因此需要正确的处理跳转;

通过 requests 模块的 head() 函数获得跳转链接的 URL , 如

url='https://unsplash.com/photos/B1amIgaNkwA/download/'
res = requests.head(url)
re=res.headers['Location']

http://chatgpt.dhexx.cn/article/pT8GDjcv.shtml

相关文章

如何用Python爬数据?(一)网页抓取

你期待已久的Python网络数据爬虫教程来了。本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel。 (由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开。如有需要,请点击文末的“阅读原文”按钮&a…

python爬虫爬取网页数据

前言 python爬取页面内容的编程教程: 1.首先要明确想要爬取的目标。对于网页源信息的爬取首先要获取url,然后定位的目标内容。具体如图所示。 2.先使用基础for循环生成的url信息。具体如图所示。 (文末送读者福利) 3.然后需要模…

Python爬虫经常爬不到数据,或许你可以看一下小编的这篇文章

原标题:解决Python爬虫爬不到数据 前言: 近期,通过做了一些小的项目,觉得对于Python爬虫有了一定的了解,于是,就对于Python爬虫爬取数据做了一个小小的总结,希望大家喜欢! 文章目录…

Python爬虫学习-简单爬取网页数据

疫情宅家无事,就随便写一些随笔吧QwQ… 这是一篇介绍如何用Python实现简单爬取网页数据并导入MySQL中的数据库的文章。主要用到BeautifulSoup requests 和 pymysql。 以网页https://jbk.39.net/mxyy/jbzs/为例,假设我们要爬取的部分数据如下图所示&#…

Python爬取网页数据

都说python爬网页数据方便,我们今天就来试试,python爬取数据到底有多方便 简介 爬取数据,基本都是通过网页的URL得到这个网页的源代码,根据源代码筛选出需要的信息 准备 IDE:pyCharm 库:requests、lxml…

Python爬虫爬取数据

我是Python小白,我会用比较通俗易懂的方法告诉你如何去爬取数据。 一开始,我们需要pycharm(也就是我们编代码的工具),其次我们需要打开我们需要爬取数据的网页,我以鞋子为例。 那么,接下来就开…

如何使用Python爬虫抓取数据?

Python爬虫应用十分广泛,无论是各类搜索引擎,还是日常数据采集,都需要爬虫的参与。其实爬虫的基本原理很简单,今天小编就教大家如何使用Python爬虫抓取数据,感兴趣的小伙伴赶紧看下去吧! 工具安装 首先需要…

Python爬虫:高效采集数据的几种方法

作为互联网时代的新生力量,爬虫技术已经成为了各行各业不可或缺的一环。那么,如何高效地获取网络数据呢?本文将从以下十个方面逐步分析讨论。 一、基于HTTP协议的爬虫 HTTP协议是目前互联网上使用最广泛的协议,基于此协议的爬虫…

unity3d 收费模式_unity3d中的访客模式

unity3d 收费模式 抽象 (Abstract) Game development as a discipline is challenging on its own compared to traditional software development. The ability to solve performance-related, architectural and other challenges is often the key to success in the field.…

狼人杀微信小程序项目实例(附源码)

一、项目展示 狼人杀是一款多人参与的,通过语言描述推动、较量口才和分析判断能力的策略类桌面游戏 玩家人数适于4-18人参与 主要角色有:狼人 、预言家 、平民 、女巫 、猎人 、白痴 、守卫 、骑士等 同时还有众多的玩家形象 各角色的职能介绍 设置游戏…

python获取游戏窗口_python中pygame针对游戏窗口的显示方法实例分析(附源码)

本文实例讲述了python中pygame针对游戏窗口的显示方法。分享给大家供大家参考,具体如下: 在这篇教程中,我将给出一个demo演示: 当我们按下键盘的‘f’键的时候,演示的窗口会切换到全屏显示和默认显示两种显示模式 并且在后台我们可以看到相关的信息输出: 上面给出了一个简…

unity3d之按秒倒计时

image.png 按秒倒计时 自定义变量计时 在程序中定义变量来累计时间。 实例代码 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class textTimer : MonoBehaviour {// Start is called before the first frame …

【开发工具】如何使用JetBrains Rider更好的开发Unity程序

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群:1040082875 一、前言 JetBrains Rider是一款快速强大的C#编辑器,也就是俗称的IDE。有2500多项的智能代码检查与重构,更加迅速编写和零误差的代码。完美集成与Unity…

Unity制作类胡闹厨房游戏 KitchenChaos 笔记整理

本文章是油管上CodeMonkey的一个unity项目KitchenChaos的笔记整理,学习并整理这个项目主要是因为终于看到了一个比较完整地用到了unity的各种功能、风格较为清爽的、代码结构清晰的同时比较新的项目。在学习之后也确实有很大的收获,首先通过该教程第一次…

unity python热更新_Unity C#热更新方案 ILRuntime学习笔记(一) Hello World

一、ILRuntime介绍 问:什么是热更新? 答:软件在使用时就能实现更新的方式就叫做热更新。热更新无需用户重新下载安装或重启,在使用时即可更新,方便快捷体验良好。 问:什么是ILRuntime? 答:ILRuntime是一个…

基于mediapipe的动作捕捉和Unity的球棍模型同步

基于mediapipe的动作捕捉和Unity的球棍模型同步 所需环境python端unity端效果 所需环境 这是我所使用的环境 python3.9 安装mediapipe和opencv-python包 python和Unity通信使用socket Unity2021.3 python端 如何安装那两个包我就不说了,大家有不明白可以去百度 m…

unity 原型_使用Unity和React快速进行原型制作

unity 原型 Web applications are great way to quickly reach a lot of users without the hassle of native client installs and play store downloads. Web frameworks such as React allow page components to communicate and respond to user interaction much like tra…

使用 命令行/WinForm 来打包Unity可执行程序

使用 命令行/WinForm 来打包Unity可执行程序 前言一、编辑Editor打包工具1.编辑打包脚本2.Unity编辑器中样式 二、命令行调用Unity打包函数1.Unity命令行常用参数2.命令行调用静态打包函数 三、使用WinForm创建可视化操作界面1.可视化界面2.代码详细:①CmdHelper类&…

Unity + Jenkins自动打包 (二)构建Jenkins项目以及编写Python、Unity脚本

1、新建Jenkens项目 在上一篇中,完成了Jenkins的安装和初始化,以及权限设置。 查看上一篇:Jenkins安装 点此 现在打开浏览器,输入http://localhost:8081,当然,需要改成你自己设置的Jenkins端口号&#xff…

unity python服务器_Unity如何连接服务器: 一个简单的例子

Unity3D本身是用来做客户端的通用游戏引擎, 要建立网络连接的话, 其实需要使用的是C#本身的网络和线程模块, 即System.Net.Sockets & System.Threading. 本文中我做了一个简单的例子, 适合那些需要做Unity客户端连接服务器功能的人入门. 整体项目 客户端: 我做的项目主要是…