Chapter3 初识网络爬虫

本文详细介绍了网络爬虫的工作原理及应用,并深入探讨了使用Python的Requests库进行高效HTTP请求的方法。涵盖爬虫结构、请求多样化处理、响应解析等关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 网络爬虫及其应用

网络爬虫是安州某种一定的规则,自动的抓取万维网信息的程序和脚本。

网络爬虫按照系统结构和实现技术,大致可以分为:通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫。

传统的通用搜索引擎就属于通用性爬虫。

聚焦爬虫:是一个能自动下载网页的程序,他根据既定的抓取目标,有选择的访问互联网上的网页与相关的连接,获取所需要的信息。

增量式网络爬虫:对以下载网页采取增量式更新和只爬取新产生的 或者已经发生变化网页的爬虫,他能够在一定程度上保证所爬行的页面尽可能是新的页面。但是增加了爬行算法的复杂度和实现难度。

深层网络爬虫:可以爬取深层网络中的数据。

1.2网络爬虫结构

1)首先选取一部分精心挑选的种子URL

2)将这些URL放入待抓取URL队列

3)从待抓取URL队列中读取待抓取队列的URL,解析DNS,并得到主机的IP,并将URL对应的网页下载下来,存储进以下载网页库中,此外将这些URL放进已抓取URL队列

4)分析已抓取URL队列中的URL,从已下载的网页数据中分析出其他的URL,并和已抓取的URL进行比较去重,最后将去重过的URL放入待抓取URL队列,从而进入下一个循环。

2.3 更人性化的Reuqests

前面两种实现方式(urlib2/urlib  httplib/urlib)由于时间关系只做了大概的了解,下面着重解释下Requests方式。

Requests是第三方库,所以需要安装。

1.首先还是实现一个完整的请求与响应模型

以GET为例,最简单的形式如下:

import requests
r=requests.get('http://www.baidu.com')
print r.content

接下来是POST请求:

import requests
postdata={'key':'value'}
r=requests.post{'http://www.xxxxx.com/login' data=postdata}
print r.content

接着讲解下稍微复杂的方式,大家见过类似的URL:http://zzk.cnblogs.com/s/blogpost?Keywords=blog:qiyeboy&pageindex=1,就是在网址后面紧跟着“?”,“?”后面跟着参数,这样的GET请求如何发送呢? 示例如下:

import requests
payload={'Keywords':'blog:qiyeboy','pageindex':1}
r=requests.get('http://zzk.cnblogs.com/s/blogpost',params=payload)
print r.url

2.响应与编码

import requests
r=requests.get('http://www.zhihu.com')
print 'content-->'+r.content
print 'text-->'+r.text
print 'encoding-->'+r.encoding
r.encoding='utf-8'
print  'new text-->'+r.text

书上说 text的输出结果是乱码的,但是我这看到的输出并不是乱码...有待考究,我想大概懂了是为什么了,因为B网站的字符编码已经是utf-8了,所以不需要再编码成utf-8了 ,正确与否有待考究。

import requests,chardet
r=requests.get('http://www.baidu.com')
print chardet.detect(r.content)
r.encoding=chardet.detect(r.content)['encoding']
print r.text

直接将chardet探测到的编码,赋给r.encoding实现解码,.text输出就不会有乱码了

除了上面那种直接获取全部响应的方式,还有一种流模式,示例如下:

import requests
r=requests.get('http://www.baidu.com',stream=True)
print r.raw.read(10)

3.请求头headers处理

Requests对headers的处理和urllib2非常相似,在Requests的get函数中添加headers参数即可,示例如下:

import requests
user_agent ='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers={'User-Agent':user_agent}
r=requests.get('http://www.baidu.com',headers=headers)
print r.content

4.响应码code和响应头headers处理

获取响应码是使用Requests中的status_code字段,获取响应头使用的是Requests中的headers字段,示例如下:

#coding:utf-8
import requests
r=requests.get('http://www.baidu.com')
if r.status_code==requests.codes.ok:
    print r.status_code #响应码
    print r.headers#响应头
    print r.headers.get('content-type')#推荐使用这种获取方式,获取其中的某个字段
    print r.headers['content-type']#不推荐使用这种
else:
    r.raise_for_status()

5.Cookie处理

如果响应中包含Cookie值,可以通过如下方式获取Cookie字段的值,示例如下:

#coding:utf-8
import requests
user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers={'User-Agent':user_agent}
r=requests.get('http://www.baidu.com',headers=headers)
#遍历所有的Cookie字段值
for cookie in r.cookies.keys():
    print cookie+':'+r.cookies.get(cookie)

如果想自定义Cookie值发送出去,可以使用以下方式:

import requests
user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers={'User-Agent':user_agent}
cookies=dict(name='qiye',age='10')
r=requests.get('http://www.baidu.com',headers=headers,cookies=cookies)
print r.text

还有一种更为高级,且能自动处理Cookie的方式,有时候我们不需要关心Cookie值是多少,只是希望每次访问的时候自动把Cookie带上,Requests提供session的概念。示例如下:

import requests
loginUrl='http://www.xxxxx.com/login'
s=requests.Session()#首先作为游客,服务器会先分配一个Cookie
r=s.get(loginUrl,allow_redirects=True)
datas={'name0:'qiye','passwd:':'qiye'}
#向登陆连接发送post请求,验证成功,游客权限转变为会员权限
r=s.post(loginUrl,data=datas,allow_redirects=True)
print r.text

6.重定向与历史信息

处理重定向只是需要设置一下,allow_redirects字段即可,例如r=requestss.get('http://www.baidu.com'.allow_redirects=True)。将allow_redirects设置为True则是允许重定向,如果允许重定向可以通过r.history字段查看历史消息。即访问成功之前的所有跳转消息,示例如下:

import requests
r=requests.get('http://www.github.com')
print r.url
print r.status_code
print r.history

7.超时设置

超时选项是通过参数timeout来进行设置的,示例如下

requests.get('http://github.com',timeout=2)

8.代理设置

使用代理Proxy,你可以为任意请求方法通过设置proxies参数来配置但个请求:

import requests
proxies={
    "http": "http://0.10.1.10:3128",
    "https": "http"//10.10.1.10:1080",
        }
requests.get("http://example.org",proxies=proxies)
小结:本章主要讲解了网络爬虫的结构和应用,以及Python实现HTTP请求的几种方法。希望大家对本章中的网络爬虫工作流程和Requests实现HTTP请求的方式重点吸收和消化
内容概要:本文围绕直流微电网中带有恒功率负载(CPL)的DC/DC升压转换器的稳定控制问题展开研究,提出了一种复合预设性能控制策略。首先,通过精确反馈线性化技术将非线性不确定的DC转换器系统转化为Brunovsky标准型,然后利用非线性扰动观测器评估负载功率的动态变化和输出电压的调节精度。基于反步设计方法,设计了具有预设性能的复合非线性控制器,确保输出电压跟踪误差始终在预定义误差范围内。文章还对比了多种DC/DC转换器控制技术如脉冲调整技术、反馈线性化、滑模控制(SMC)、主动阻尼法和基于无源性的控制,并分析了它们的优缺点。最后,通过数值仿真验证了所提控制器的有效性和优越性。 适合人群:从事电力电子、自动控制领域研究的学者和工程师,以及对先进控制算法感兴趣的研究生及以上学历人员。 使用场景及目标:①适用于需要精确控制输出电压并处理恒功率负载的应用场景;②旨在实现快速稳定的电压跟踪,同时保证系统的鲁棒性和抗干扰能力;③为DC微电网中的功率转换系统提供兼顾瞬态性能和稳态精度的解决方案。 其他说明:文中不仅提供了详细的理论推导和算法实现,还通过Python代码演示了控制策略的具体实现过程,便于读者理解和实践。此外,文章还讨论了不同控制方法的特点和适用范围,为实际工程项目提供了有价值的参考。
内容概要:该论文介绍了一种名为偏振敏感强度衍射断层扫描(PS-IDT)的新型无参考三维偏振敏感计算成像技术。PS-IDT通过多角度圆偏振光照射样品,利用矢量多层光束传播模型(MSBP)和梯度下降算法迭代重建样品的三维各向异性分布。该技术无需干涉参考光或机械扫描,能够处理多重散射样品,并通过强度测量实现3D成像。文中展示了对马铃薯淀粉颗粒和缓步类动物等样品的成功成像实验,并提供了Python代码实现,包括系统初始化、前向传播、多层传播、重建算法以及数字体模验证等模块。 适用人群:具备一定光学成像和编程基础的研究人员,尤其是从事生物医学成像、材料科学成像领域的科研工作者。 使用场景及目标:①研究复杂散射样品(如生物组织、复合材料)的三维各向异性结构;②开发新型偏振敏感成像系统,提高成像分辨率和对比度;③验证和优化计算成像算法,应用于实际样品的高精度成像。 其他说明:PS-IDT技术相比传统偏振成像方法具有明显优势,如无需干涉装置、无需机械扫描、可处理多重散射等。然而,该技术也面临计算复杂度高、需要多角度数据采集等挑战。文中还提出了改进方向,如采用更高数值孔径(NA)物镜、引入深度学习超分辨率技术等,以进一步提升成像质量和效率。此外,文中提供的Python代码框架为研究人员提供了实用的工具,便于理解和应用该技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值