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学习站 官方技术圈!

相关文章
|
26天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
30天前
|
数据采集 存储 XML
Python爬虫:深入探索1688关键词接口获取之道
在数字化经济中,数据尤其在电商领域的价值日益凸显。1688作为中国领先的B2B平台,其关键词接口对商家至关重要。本文介绍如何通过Python爬虫技术,合法合规地获取1688关键词接口,助力商家洞察市场趋势,优化营销策略。
|
5天前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
6天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
15天前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
20天前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
20天前
|
数据采集 存储 JavaScript
网页爬虫技术全解析:从基础到实战
在信息爆炸的时代,网页爬虫作为数据采集的重要工具,已成为数据科学家、研究人员和开发者不可或缺的技术。本文全面解析网页爬虫的基础概念、工作原理、技术栈与工具,以及实战案例,探讨其合法性与道德问题,分享爬虫设计与实现的详细步骤,介绍优化与维护的方法,应对反爬虫机制、动态内容加载等挑战,旨在帮助读者深入理解并合理运用网页爬虫技术。
|
26天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
45 10
|
27天前
|
数据采集 JSON 开发者
Python爬虫京东商品详情数据接口
京东商品详情数据接口(JD.item_get)提供商品标题、价格、品牌、规格、图片等详细信息,适用于电商数据分析、竞品分析等。开发者需先注册账号、创建应用并申请接口权限,使用时需遵循相关规则,注意数据更新频率和错误处理。示例代码展示了如何通过 Python 调用此接口并处理返回的 JSON 数据。
|
2月前
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href='example.com']` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。