Day:002 | Python爬虫:高效数据抓取的编程技术(爬虫基础)

第一个爬虫

        怎样扒网页呢? 其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它是一段HTML代码,加 JS、CSS。如果把网页比作一个人,那么HTML便是他的骨架,JS便是他的肌肉,CSS便是它的衣服。所以最重要的部分是存在于HTML。

  • HTML 70%

  • JS 20%

  • CSS 10%

爬取页面,代码如下:

from urllib.request import urlopen

#请求的地址
url = 'http://www.baidu.com/'

#发送请求
resp = urlopen(url)
#打印响应结果
print(resp.read())

输出结果:

注意: urllib模块库是python自带的。在Python2叫urllib2

urllib的基本使用

requset.urlopen(url,data,timeout)

        第一个参数url即为URL,是必须要传送的。第二个参数data是访问URL时要传送的数据,第三个timeout是设置超时时间。第二三个参数是可以不传送的,data默认为空None,timeout默认为

socket._GLOBAL_DEFAULT_TIMEOUT

response.read()

        read()方法就是读取文件里的全部内容,返回bytes类型

response.getcode()

        返回 HTTP的响应码,成功返回200,4服务器页面出错,5服务器问题

response.geturl()

        返回 返回实际数据的实际URL,防止重定向问题 response.info() 返回 服务器响应的HTTP报头

爬取页面,代码如下:

from urllib.request import urlopen
url = 'http://www.baidu.com/'

resp = urlopen(url) # 发送请求,并将结果返回给resp

print(resp.read())  # 读取数据

print(resp.getcode())   # 为了判断是否要处理请求的结果

print(resp.geturl())    # 为了记录访问记录,避免2次访问,导致出现重复数据

print(resp.info())      # 响应头的信息,取到里面有用的数据

输出结果:

Request对象的使用

使用urllib.request.urlopen发送请求时,可以将参数封装到一个 Request对象中。 参数包含:

  • url 发送的请求链接

  • headers 请求头信息

  • data 请求数据

比如:我们可以这么改写

 
from urllib.request import Request,urlopen

url = 'http://www.baidu.com/'
#创建Request
req = Request(url)
#发送请求
resp = urlopen(req)
#打印结果
print(resp.read().decode()[:100])

 运行结果和直接传递URL完全一样的,只不过中间多了一个request对象,推荐大家这么写,因为在构建请求时还需要加入好多内容,通过构建一个request,服务器响应请求得到应答,这样显得逻辑上清晰明确

from urllib.request import urlopen
from urllib.request import Request

url = 'http://www.server.com/login'

user_agent = 'Mozilla/4.0 (compatible; MSIE5.5; Windows NT)'

headers = { 'User-Agent' : user_agent }  

request = Request(url, headers=headers)  

response = urlopen(request)  

page = response.read()

发送请求/响应header头的含义:

名称含义
Accept告诉服务器,客户端支持的数据类型
Accept-Charset告诉服务器,客户端采用的编码
Accept-Encoding告诉服务器,客户机支持的数据压缩格式
Accept-Language告诉服务器,客户机的语言环境
Host客户机通过这个头告诉服务器,想访问的主机名
If-Modified-Since客户机通过这个头告诉服务器,资源的缓存时间
Referer客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的。(一般用 于防盗链)
User-Agent客户机通过这个头告诉服务器,客户机的软件环境
Cookie客户机通过这个头告诉服务器,可以向服务器带数据
Refresh服务器通过这个头,告诉浏览器隔多长时间刷新一次
Content-Type服务器通过这个头,回送数据的类型
Content-Language服务器通过这个头,告诉服务器的语言环境
Server服务器通过这个头,告诉浏览器服务器的类型
Content-Encoding服务器通过这个头,告诉浏览器数据采用的压缩格式
Content-Length服务器通过这个头,告诉浏览器回送数据的长度

后续....... 

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值