网络爬虫学习理解笔记(二)——浏览器的伪装

1.基础知识

1.1urllib基础

urlretrieve()函数:下载网页到本地

urllib.request.urlretrieve('网址','下载到本地的位置')

 info()函数:获取页面信息

getcode():获取当前页面状态信息

geturl():获取当前访问的网页的url

以上三个函数的使用格式:

f=urllib.request.urlopen('http://www.baidu.com')
print(f.info())#获取页面信息
print(f.getcode())#获取当前页面的状态码
print(f.geturl)#获取当前访问页面的url

urlcaeanup()函数:清除爬虫爬取过程中产生的缓存,提升处理速度。

urllib.request.urlcleanup()

1.2超时设置

作用:超时设置是为了受解决网络或者服务器的影响,网页无法访问的问题。使用timeout设置响应时间,单位为秒。

import urllib.request
f=urllib.request.urlopen('http://www.baidu.com',timeout=1)

 超时设置可以和异常处理结合,实现具体问题的处理:

import urllib.request
try:
    f=urllib.request.urlopen('http://www.baidu.com',timeout=1)
except Exception as err:
    print('出现错误')

2.自动模拟HTTP请求

http请求是客户端在于服务器进行通信时的必要手段。http请求分为很多种:

1GET请求指定的页面信息,并返回实体主体。
2HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4PUT从客户端向服务器传送的数据取代指定的文档的内容。
5DELETE请求服务器删除指定的页面。
6CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7OPTIONS允许客户端查看服务器的性能。
8TRACE回显服务器收到的请求,主要用于测试或诊断。
9PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新 。

 GET的形式:.html?字段=值&字段=值····

代码演示:

import urllib.request
import re
keyword='Python'#keword=urllib.request.quote(keword)中文需要转码
url='https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd='+keyword
info=urllib.request.urlopen(url).read().decode('utf-8')
print(info)
pat="title:'(.*?)',"
rst=re.compile(pat).findall(info)
print(rst)

POST请求:

import urllib.parse
posturl="网站/mypost/"
postdata=urllib.parse.urlencode({
    "name":"用户名",
    "pass":"密码",
    }).encode("utf-8")
#进行post,就需要使用urllib.request下面的Request(真实post地址,post数据)
req=urllib.request.Request(posturl,postdata)
rst=urllib.request.urlopen(req).read().decode("utf-8")

爬虫异常处理:

URLError与HTTOError

URLError出现的原因:
           1 连不上服务器
           2 远程url不存在
           3 无网络
           4 触发HTTPError

使用urllib.error模块

代码演示:

try:
    urllib.request.urlopen('网址')
except urllib.error.URLError as e:
    if hasattr(e,'code'):
        print(e.code)
    if hasattr(e,'reason'):
        print(e.reason)

3.伪装浏览器

打开任意浏览器,按F12,找到网络,点all,当刷新页面或者点击新的链接时候会出现一部分URL,点击任意的URL,找到消息头里面的请求头里面的User-Agent,这就是在访问网址时候,服务器识别你是个浏览器还是个爬虫的依据。所以,在爬虫爬取时候,我们可以改爬虫的报头去实现爬取。

代码演示:

import urllib.request
import re
url='https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=monline_3_dg&wd=Python'
#伪装头文件,使用元组的方式
headers=('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0')
opener=urllib.request.build_opener()
opener.addheaders=[headers]
info=opener.open(url).read().decode('utf-8')
print(info)
pat="title:'(.*?)',"
rst=re.compile(pat).findall(info)
print(rst)

个人总结:

通过以上方法伪装浏览器实现对页面的访问,可以有效地防止反爬虫机制,实现对数据的爬取。首先将要伪装的浏览器的User-Agent信息以元组的方式保存,接着利用urllib.request里的urllib.request.build_opener()对http进行高级处理,利用addheaders()实现浏览器的模拟,当然也可以使用add_header('User-Agent'(字段名),字段值)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值