python爬虫urllib使用和进阶 | Python爬虫实战二

简介: 其实爬虫就是浏览器,只不过它是一个特殊的浏览器。爬取网页就是通过HTTP协议访问相应的网页,不过通过浏览器访问往往是人的行为,把这种行为变成使用程序来访问就是爬虫的过程。

查看上一节:python爬虫分类和robots协议

python爬虫urllib使用和进阶

上节课已经介绍了爬虫的基本概念和基础内容,接下来就要开始内容的爬取了。

其实爬虫就是浏览器,只不过它是一个特殊的浏览器。爬取网页就是通过HTTP协议访问相应的网页,不过通过浏览器访问往往是人的行为,把这种行为变成使用程序来访问就是爬虫的过程。

用户在使用浏览器的时候,翻阅速度是比较慢的,但是爬虫在访问的时候速度是很快的,它会很快的获取到页面上的内容,并将其变成自己网站的内容,所以对于开发者来讲,对于这些搜索引擎的爬虫是又爱又恨的。

有的网站会设置反爬虫策略来拒绝爬虫对网站内容的爬取要求。此时我们要爬取这种网站的话,是要对程序进行包装的,尽量去模拟人的行为来获取网站内容。

urllib包

urllib是Python提供的一个工具包,用来处理url和相应的一些内容的。

Python 2中提供了urllib和urllib 2。urllib提供较为底层的接口, urllib2对urllib进行了进一步封装。
Python 3中将urllib合并到了urllib 2中, 并只提供了标准库urllib包。我们重点使用的是Python3,但是它们的接口都是相同的,掌握了就可以在任何场景使用。

urllib还有一些子包,分别介绍下:

urllib.request模块(用的比较多)

用于打开和读写url。模块定义了在基本和摘要式身份验证、重定向、cookies等应用中打开URL(主要是HTTP)的函数和类。

  • urllib.error 包含了由urllib.request引起的异常
  • urllib.parse 用于解析url
  • urllib.robot parser 分析robots.txt文件

urlopen方法

格式:url open(url, data=None)
注释:url是链接地址字符串, 或请求对象。
data是提交的数据, 如果data为None发起GET请求, 否则发起POST请求。见urllib.request.Request#get_method返回http.client.HTTPResponse类的响应对象, 这是一个类文件对象。
接下来看一段代码:
image.png
验证其中的“返回真正的URL”:打开http://www.bing.com 按下F12 打开其中的Network状态栏,点击刷新:
image.png
可以看到第一个访问的是必应网站,这里的301代表的意思是,首先打开必应的网站,然后通过持久的移动到中国的必应网站;
这里的location是跳转位置,301代表永久的跳转,302 代表的是临时的跳转;
代码运行结果:
image.png
可以发现,urlopen是可以自动跳转的。
总结:
上例, 通过urllib.request.url open方法, 发起一个HTTP的GET请求, WEB服务器返回了网页内容。响应的数据被封装到类文件对象中, 可以通过read方法、readline方法、read lines方法获取数据, status和reason属性表示返回的状态码, info方法返回头信息, 等等。
User-Agent问题
上例的代码非常精简, 即可以获得网站的响应数据。url open方法只能传递url和data这样的数据, 不能构造HTTP的请求。例如useragent。
源码中构造的useragent如下:
image.png
当前显示为:Python-urllib/3.6
有些网站是反爬虫的,所以要把爬虫伪装成浏览器。随便打开一个浏览器,复制浏览器的UA值,进行伪装。
UA值获取方法:
打开浏览器的设置。选择高级,选择自定义UserAgent字符串,随意切换想要的UA值。
image.png
这里演示的是使用Chrome的ua值:
image.png
通过UA值的伪装,就可以告诉别人,“我是一个浏览器”,那么UA值该如何使用呢?这里就要用到request类:

Request类
首先它会有一个header,在这里记录了一些基本的信息:
image.png
还要有一个User-agent,这里是一些版本的要求,以及对能接受的浏览器版本、CSS样式等信息的描述:
image.png
有了以上两个参数,就可以构建一个request请求了。

接下来就是对request的使用实战演示:
image.png
运行结果为:
image.png
总结:
格式:Request(url, data=None, headers=() )
要在发起请求之前将内容填充完毕!

初始化方法, 构造一个请求对象。可添加一个header的字典。data参数决定是GET还是POST请求。add_header(key, val) 为header中增加一个键值对。

接下来看一个示例:

from urllib.request import Request, url open
import random#随机函数,用来随机UA值
#打开一个url返回一个Request请求对象
#url='https://movie.douban.com/'#注意尾部的斜杠一定要有
url='http://www.bing.com/'
ua_list=[#包含UA值的List,不停地切换地址,保证不被发现是爬虫
    ”Mozilla/5.0(WindowsNT I 6.1; Win 64; x 64) Apple WebKit/537.36(KHTML, like Gecko)Chrome /57.0.2987. 133 Safari/537.36”, #chrome
    ”Mozilla/5.0(Windows; U; WindowsNT 6.1; zh-CN) Apple webKit/537.36(KHTML, like Gecko)Version /5.0. 1 Safari/537.36”, #safa fi
    ”Mozilla/5.0(WindowsNT 6.1; Win 64; x 64; rv:50. 0) Gecko/ 20100101 Firefox/50.0”, #Firefox“Mozilla/5.0(compatible; MSIE 9.0; WindowsNT 6.1; Trident/5.0) ”#IE
ua=random.choice(ua_list) #随机一个UA值
#ua需要加到请求头中
request=Request(url)
request.add_header('User-Agent', random.choice(ua_list) )
print(type(request) )
response=url open(request, timeout=20) #request对象或者url都可以
print(type(response) )

with response:
    print(1, response.status, response.get code() , response.reason)#状态, get code本质上就是返回
status
    print(2, response.geturl() )#返回数据的url。如果重定向, 这个url和原始url不一样
    # 例如原始url是http://www.bing.com/, 返回http://cn.bing.com/
    print(3, response.info() )#返回响应头headers
    print(4, response.read() )#读取返回的内容

print(5, request.get_header('User-agent') )
print(6,'user-agent'.capitalize() )

执行结果为:
image.png
到这里就完成了对User-agent的修改,同时也学会了request和urlopen的使用方式。

上述的简单代码是学习爬虫的第一步,就算以后在开发中会用到框架,但是还是从基本内容出发的,希望同学们可以多加了解!

点击查看配套视频课程

获取更多内容,请订阅 Python学习站 官方技术圈!

相关文章
|
6月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
732 7
|
6月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
6月前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
1027 62
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
|
6月前
|
数据采集 机器学习/深度学习 人工智能
反爬虫机制深度解析:从基础防御到高级对抗的完整技术实战
本文系统阐述了反爬虫技术的演进与实践,涵盖基础IP限制、User-Agent检测,到验证码、行为分析及AI智能识别等多层防御体系,结合代码实例与架构图,全面解析爬虫攻防博弈,并展望智能化、合规化的发展趋势。
2102 62
反爬虫机制深度解析:从基础防御到高级对抗的完整技术实战
|
6月前
|
存储 分布式计算 测试技术
Python学习之旅:从基础到实战第三章
总体来说,第三章是Python学习路程中的一个重要里程碑,它不仅加深了对基础概念的理解,还引入了更多高级特性,为后续的深入学习和实际应用打下坚实的基础。通过这一章的学习,读者应该能够更好地理解Python编程的核心概念,并准备好应对更复杂的编程挑战。
192 12
|
6月前
|
数据采集 人工智能 JSON
Prompt 工程实战:如何让 AI 生成高质量的 aiohttp 异步爬虫代码
Prompt 工程实战:如何让 AI 生成高质量的 aiohttp 异步爬虫代码
|
6月前
|
数据采集 存储 JSON
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
|
6月前
|
存储 数据采集 监控
Python文件操作全攻略:从基础到高级实战
本文系统讲解Python文件操作核心技巧,涵盖基础读写、指针控制、异常处理及大文件分块处理等实战场景。结合日志分析、CSV清洗等案例,助你高效掌握文本与二进制文件处理,提升程序健壮性与开发效率。(238字)
528 1
|
6月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
1091 1
|
6月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
608 0

推荐镜像

更多