Python要访问一个网页并读取网页内容非常简单,在利用《第14.5节 利用浏览器获取的http信息构造Python网页访问的http请求头》的方法构建了请求http报文的请求头情况下,使用urllib包的request模块使得这项工作变得非常容易,具体语句如下:

header = mkhead()
req = urllib.request.Request(url=site,headers=header)
sitetext = urllib.request.urlopen(req).read().decode()

urllib.request.Request和urllib.request.urlopen这2个语句也可以合并成一个句子,在此不详细介绍,相关说明请参考:

https://docs.python.org/3/library/urllib.request.html?highlight=request#module-urllib.request

说明:

1、 在国内decode的参数一般是缺省值、UTF-8、GBK这三种,如果是缺省值就是UTF-8;

2、 site就是要访问网站的网址;

3、 headers参数是http报文头的内容,请参考《第14.1节 通过Python爬取网页的学习步骤》或《第14.3节 使用google浏览器获取网站访问的http信息》介绍的有关http报文头的知识。实际设置时,报文头的内容可多可少,具体看爬虫访问网站的要求:

1)headers参数可以不传实参,也可以为空字典实参,不传实参系统缺省使用空字典,这种情况下Python处理时会自动补充一些内容以使web服务器能正确处理,这些值带有浓郁的Pythonic味道,可以使得服务端很容易知道这是Python代填充的,具体填充值大家可以使用抓包程序看一下。对于爬虫程序来说这不是很好的事情,因为爬虫最好是能伪装成正常的浏览器访问;

2)headers填写部分参数,老猿建议填写下列参数:

 User-Agent:这个是表明使用的哪个浏览器的,关于其来历可参考一下《转:为什么浏览器的user-agent字符串以’Mozilla’开头呢?》,具体取值网上可以查一下,最好办法是直接抓取真实浏览器的数据填入,如老猿直接使用本机浏览器的信息:

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36

怎么抓取信息请见章节《第14.3节 使用google浏览器获取网站访问的http信息》、《第14.4节 使用IE浏览器获取网站访问的http信息》。

 Accept:这个是表明本机作为客户端浏览器可接受的MIME类型(互联网媒体类型),就是本机能识别处理的互联网信息类型,最好也从本机或其他真实的机器上抓取填入。如老猿抓取本机浏览器发送的请求信息中,填写的值为:‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3’

 Accept-Encoding:浏览器能够支持的压缩编码方式,如gzip, deflate, br等,服务端的报文体的压缩格式在响应报文的报文头的Content-Encodin字段中记载。http请求时通过Accept-Encoding告知服务端本客户端能识别的压缩格式,服务端根据该字段及服务端的情况采用对应方式压缩http报文体。注意如果应用中没有考虑服务端http报文体的解压缩,则这个值不要设置,否则会导致应用无法识别收到的响应报文体。关于HTTP响应报文头的信息请参考《转:http协议学习系列(响应头—Response Headers)》;

 Accept-Language: 客户端浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到,如zh-CN,zh;q=0.9等;

 Connection:表示是否需要持久连接,keep-alive表示是持久连接;

 cookie:会话cookie信息,如果要复用已有浏览器会话不实现登录管理则可以直接复制已有浏览器会话的cookie,否则要么应用程序自己实现网站登录,要么就是匿名访问,具体大家可以根据自己爬虫应用的要求来确认处理方式。

以上信息老猿建议根据爬虫功能的需要设置,但User-Agent是必须设置,这样才能使得应用程序貌似一个正常的浏览器。

案例:下面是老猿访问自己博客文章的代码:

>>> import urllib.request
>>> def mkhead():
header = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'Accept-Language':'zh-CN,zh;q=0.9',
'Connection':'keep-alive',
'Cookie':'uuid_tt_dd=10_35489889920-1563497330616-876822; ...... ',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'}
return header >>> url= r'https://blog.csdn.net/LaoYuanPython'
>>> header=mkhead()
>>> req = urllib.request.Request(url=url,headers=header)
>>> text = urllib.request.urlopen(req).read().decode() >>> text[0:100]
'<!DOCTYPE html>\n<html lang="zh-CN">\n<head>\n <meta charset="UTF-8">\n <link rel="canonical" href'
>>>

执行后,text中存放的就是要访问网页的内容,上述案例中显示了读取信息的前100个字符。

本节介绍了使用urllib包的request模块读取网页的实现过程,整体过程非常简单,读取了网页内容后就可以进行网页内容的解析。

老猿Python,跟老猿学Python!

博客地址:https://blog.csdn.net/LaoYuanPython


老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036

请大家多多支持,点赞、评论和加关注!谢谢!

第14.6节 使用Python urllib.request模拟浏览器访问网页的实现代码的更多相关文章

  1. 第14.7节 Python模拟浏览器访问实现http报文体压缩传输

    一. 引言 在<第14.6节 Python模拟浏览器访问网页的实现代码>介绍了使用urllib包的request模块访问网页的方法.但上节特别说明http报文头Accept-Encodin ...

  2. python urllib.request

    一.简介 urllib.request 模块提供了访问 URL 的相关功能 二.常用函数 urllib.request.urlopen("http://httpbin.org", ...

  3. Python使用mechanize模拟浏览器

    Python使用mechanize模拟浏览器 之前我使用自带的urllib2模拟浏览器去进行訪问网页等操作,非常多站点都会出错误,还会返回乱码.之后使用了 mechanize模拟浏览器,这些情况都没出 ...

  4. 第14.1节 通过Python爬取网页的学习步骤

    如果要从一个互联网前端开发的小白,学习爬虫开发,结合自己的经验老猿认为爬虫学习之路应该是这样的: 一. 了解HTML语言及css知识 这方面的知识请大家通过w3school 去学习,老猿对于html总 ...

  5. Python 配置 selenium 模拟浏览器环境,带下载链接

    使用浏览器渲染引擎.直接用浏览器在显示网页时解析HTML,应用CSS样式并执行JavaScript的语句. 这方法在爬虫过程中会打开一个浏览器,加载该网页,自动操作浏览器浏览各个网页,顺便把数据抓下来 ...

  6. python下selenium模拟浏览器基础操作

    1.安装及下载 selenium安装: pip install selenium  即可自动安装selenium geckodriver下载:https://github.com/mozilla/ge ...

  7. Python urllib Request 用法

    转载自:https://blog.csdn.net/ywy0ywy/article/details/52733839 python2.7 httplib, urllib, urllib2, reque ...

  8. python之mechanize模拟浏览器

    安装 Windows: pip install mechanize Linux:pip install python-mechanize 个人感觉mechanize也只适用于静态网页的抓取,如果是异步 ...

  9. 使用python selenium webdriver模拟浏览器

    selenium是进行web自动化测试的一个工具,支持C,C++,Python,Java等语言,他能够实现模拟手工操作浏览器,进行自动化,通过webdriver驱动浏览器操作,我使用的是chrome浏 ...

随机推荐

  1. Redis缓存穿透和雪崩

    缓存穿透 用户想要查询一个数据 在redis缓存数据库中没有获取到 就会向后端的数据库中查询. 当用户很多 都去访问后端数据库的话,这就会给数据库带来很大的压力. 常见场景:秒杀活动 等 解决方法: ...

  2. Boost.Accumulators累加器的简单使用

    Boost.Accumulators是一个累加器,实现的功能很简单,就是对一组数据进行操作,然后可以得到一些特征数据. 由于累加器默认不对数据进行储存操作,所以不能把它作为一个简单的容器使用. 简单使 ...

  3. Python之Matplot——01.堆叠柱状图的绘制

    1.Matplotlib是python的一个绘图库,可以方便的绘制各种图标,是数据可视化的利器. 2.本文我就给大家介绍一下条形图或者说柱状图的绘制 3.代码如下: <1>首先导入模块 1 ...

  4. python_sys.argv的使用

    # sys.argv练习 # 写一个python脚本,在cmd里执行 # python xxx.py 用户名 密码 cp 文件路径 目的地址 # python xxx.py alex sb cp D: ...

  5. centos6.5开机执行命令

    虚拟机由于用nat方式联网centos6.5,设置了eth0 dhcp,开机没自动获取到IP, 导致secureCRT连不上,所以,让linux开机自动执行下dhclient获取下分配的ip, 这样, ...

  6. 线程池 ThreadPoolExecutor 原理及源码笔记

    前言 前面在学习 JUC 源码时,很多代码举例中都使用了线程池 ThreadPoolExecutor,并且在工作中也经常用到线程池,所以现在就一步一步看看,线程池的源码,了解其背后的核心原理. 公众号 ...

  7. PF_PACKET&&tcpdump

    linux下抓包原理 linux下的抓包是通过注册一种虚拟的底层网络协议来完成对网络设备消息的处理权.当网卡接收到一个网络报文之后,它会遍历系统中所有已经注册的网络协议,当抓包模块把自己伪装成一个网络 ...

  8. IP 层收发报文简要剖析2--ip报文的输入ip_local_deliver

    ip报文根据路由结果:如果发往本地则调用ip_local_deliver处理报文:如果是转发出去,则调用ip_forward 处理报文. 一.ip报文转发到本地: /* * Deliver IP Pa ...

  9. CSS属性(display)

    1.display属性 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset= ...

  10. 学会网页制作,web app开发,必须先从语法基础开始学习

    做软件开发,是从事编程开发工作,必须先从语法基础开始学习,通过语法组成产品效果.      前端开发的基础语法,由HTML+CSS+JavaScript组成,这是前端开发最基本的3个语言.       ...