python爬虫从0开始!小白一起学!(1)

主要目录包括

1.静态页面与动态页面的区别

2.requests包的用法

3.小小爬虫实例(爬取百度翻译)

一.静态页面与动态页面的区别

在最最开始学习爬虫的时候,我就不太懂,为什么有的页面可以直接获取,有的还需要去控制台的网络模块抓包。取决于是动态页面还是静态页面啦!

静态网页

静态网页是标准的 HTML 文件,通过 GET 请求方法可以直接获取,文件的扩展名是.html.htm等,网面中可以包含文本、图像、声音、FLASH 动画、客户端脚本和其他插件程序等。静态网页是网站建设的基础,早期的网站一般都是由静态网页制作的。静态并非静止不动,它也包含一些动画效果,这一点不要误解。

我们知道,当网站信息量较大的时,网页的生成速度会降低,由于静态网页的内容相对固定,且不需要连接后台数据库,因此响应速度非常快。但静态网页更新比较麻烦,每次更新都需要重新加载整个网页。

静态网页的数据全部包含在 HTML 中,因此爬虫程序可以直接在 HTML 中提取数据。通过分析静态网页的 URL,并找到 URL 查询参数的变化规律,就可以实现页面抓取。与动态网页相比,并且静态网页对搜索引擎更加友好,有利于搜索引擎收录。

动态网页

动态网页指的是采用了动态网页技术的页面,比如 AJAX(是指一种创建交互式、快速动态网页应用的网页开发技术)、ASP(是一种创建动态交互式网页并建立强大的 web 应用程序)、JSP(是 Java 语言创建动态网页的技术标准) 等技术,它不需要重新加载整个页面内容,就可以实现网页的局部更新。

动态页面使用“动态页面技术”与服务器进行少量的数据交换,从而实现了网页的异步加载。

如下图所示(这样需要右键打开控制台,并且点击网络)

滚动鼠标滑轮时,网页会从服务器数据库自动加载数据并渲染页面,这是动态网页和静态网页最基本的区别。抓取动态网页的过程较为复杂,需要通过动态抓包来获取客户端与服务器交互的 JSON 数据。

二.requests包

之前爬虫还会用到urllib包,不过这个包用起来比较复杂,有点老,现在一般不用,大多用requests包。

Python requests 是一个常用的 HTTP 请求库,可以方便地向网站发送 HTTP 请求,并获取响应结果。

requests 模块比 urllib 模块更简洁。

使用 requests 发送 HTTP 请求需要先导入 requests 模块:

在此之前需要先

pip install request这个包

然后

import requests

导入后就可以发送 HTTP 请求,使用 requests 提供的方法向指定 URL 发送 HTTP 请求,例如:

import requests

x=requests.get('http://www.baidu.com')
x.encoding='utf-8'
print(x.text)

每次调用 requests 请求之后,会返回一个 response 对象,该对象包含了具体的响应信息,如状态码、响应头、响应内容;

一些常用属性和方法

close()关闭与服务器的连接
content返回响应的内容,以字节为单位
cookies返回一个 CookieJar 对象,包含了从服务器发回的 cookie
encoding解码 r.text 的编码方式
headers返回响应头,字典格式
json()返回结果的 JSON 对象 (结果需要以 JSON 格式编写的,否则会引发错误)
text返回响应的内容,unicode 类型数据
url返回响应的 URL
status_code

返回 http 的状态码,比如 404 和 200(200 是 OK,404 是 Not Found)

requests 方法

delete(urlargs)发送 DELETE 请求到指定 url
get(urlparams, args)发送 GET 请求到指定 url
head(urlargs)发送 HEAD 请求到指定 url
patch(urldata, args)发送 PATCH 请求到指定 url
post(urldata, json, args)发送 POST 请求到指定 url
put(urldata, args)发送 PUT 请求到指定 url
request(methodurlargs)

向指定的 url 发送指定的请求方法

1) requests.get()

该方法用于 GET 请求,表示向网站发起请求,获取页面响应对象。语法如下:

res = requests.get(url,headers=headers,params,timeout)

参数说明如下:

  • url:要抓取的 url 地址。
  • headers:用于包装请求头信息。
  • params:请求时携带的查询字符串参数。
  • timeout:超时时间,超过时间会抛出异常。

(2)requests.post() 方法可以发送 POST 请求到指定 url,一般格式如下:

requests.post(url, data={key: value}, json={key: value}, args)
  • url 请求 url。

  • data 参数为要发送到指定 url 的字典、元组列表、字节或文件对象。

  • json 参数为要发送到指定 url 的 JSON 对象。

  • args 为其他参数,比如 cookies、headers、verify等。

以上两种比较常用

三.实战一下吧(百度翻译)

打开百度翻译网站(https://fanyi.baidu.com)

按照惯例导入requests包,因为这里要给网页一个信息他才会反馈信息回来,所以采用post方法

我们的目的就是获取下面翻译后的内容

以下是控制台页面,可以右键点击检查后获得,或者F12

因为是动态的,我们点击网络后,重新抓包(刷新页面或者输入搜索信息)

 我们找到预览中显示结果的包,获取他的URL做为我们访问的URL

 

通过负载可以看到传给网页的数据是字典格式,模仿一下:(kw:dog)

最后代码如下:

import requests
url="https://fanyi.baidu.com/sug"
data={
    'kw':input("请输入一个你想搜索的单词")#在浏览器里面找
}
resp=requests.post(url,data=data)

# resp.encoding='utf-8'如果汉语是乱码可以加这一句
# print(resp.text)
#如果返回内容是json,可以直接resp.json()
print(resp.json())

 结果展示

 

这个小箭头可以帮助你在控制台自动换行哦

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值