写一个简单的爬虫

一、了解网页

 打开任何一个网页,这里以百度首页为例,如图

 按快捷键【Ctrl+U】打开源码界面,如下图所示

 网页一般由三部分组成,分别是HTML(超文本标记语言)、CSS(层叠样式表)、JScript(活动脚本语言),其中HTML是整个网页的结构,CSS表示样式,JScript表示功能。(这里只简要介绍一下,相关知识的具体介绍请见其它资料)

二、使用requests库请求网站

(1)网页请求的过程

     Request(请求)   

    每一个展示在用户前面的网页都必须经过这一步,也就是向服务器发送访问请求。

     Response(响应)

     服务器在接收到用户的请求后,会验证请求的有效性,然后向用户(客户端)发送响应的内容,客户端接受服务器响应的内容,将内容展示出来,就是我们熟悉的网页请求。

(2)网页请求的方式

     GET:最常见的方式,一般用于获取或者查询资源信息,是大多数网站使用的方式,响应速度快。

      POST:相比GET方式,多了以表单形式上传参数的功能,可以修改信息

(3)使用GET方式抓取数据

      首先我们找到我们想要爬取对象,这里我的实例请求对象是中国旅游网 ——中国文旅门户网站 (cntour.cn),请求方式是GET(所有在源码中的数据请求都是GET)

确定好请求对象和方式后,在自己的编译器上输入以下代码(可以是pycharm,我这里的运行环境是VScode)

import requests #导入requests包
url='http://www.cntour.cn/'
p=requests.get(url) #get方式,获取网页数据
print(p.text)

        如下图所示(VScode),按F5再按enter

 得到输出结果如下

 案例说明

1、加载库使用的语句是import+库的名字,上述过程中,加载requests库的语句是:import requests.

2、用GET方式获取数据需要调用request库中的get方法,如下所示

requests.get

3、将获取的数据存到变量中,这里我选择的是p,如下所示

p=requests.get(url)

4、这里p就是一个URL对象,他代表整个网页,下面的语句代表网页中的源码

p.text

(4)使用post方式抓取爬虫

我们以有道翻译的网址来进行实例讲解,首先进入有道翻译的网址在线翻译_有道 (youdao.com),然后按F12进入开发者模式,单机网络,此时内容为空,如下所示。

在有道中翻译中输入“这瓜保熟吗 ”进行翻译,如下图所示

 同样进入开发者模式中,按F12,点击网络和XHR按钮,找到翻译数据。

再单机标头,发现请求数据的方式为post,如图

 由此我们确定数据所处之处和请求方式之后,开始撰写爬虫代码; 

 首先,我们将标头header中的url(就是统一资源定位,一个表示,就是网络地址)复制出来,并赋值给url,如下所示。

代码如下:

url='https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'

 其中,post的请求方式和get不同,它必须构建请求头才可以。Form Data中的请求参数如下所示,将其复制并构建一个新字典。

代码如下:

Form_data= {'i': '这瓜保熟吗','from' : ' AUTO ' , 'to':' AUTO','smartresult': 'dict','client': 'fanyideskweb',
'salt':' 16299609133248',
'sign':' b78270339ca72725d073e6b75887ee9a',
'lts': '1629960913324',
'bv': 'fc41b27ce835a3ef91482b3bc56520d8',
'doctype':' json',
'version': '2.1',
'keyfrom':' fanyi.web',
'action': 'FY_BY_REALTlME'}

 接下来使用request.post方法请求表单数据,代码如下:

import requests
response=requests.post(url,data=payload)

将字符串格式的数据转换为JSON格式数据,根据数据结构,提取数据,并将翻译结果打印出来,代码如下:

import json
content = json.loads(response.text)
print(content['translateResult'][0][0]['tgt'])

使用requests.post抓取有道翻译结果的完整代码如下:

import requests
import json
def get_translate_date(word=None):
    url='https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
    Form_data= {'i': '这瓜保熟吗','from' : ' AUTO ' , 'to':' AUTO','smartresult': 'dict','client': 'fanyideskweb',
'salt':' 16299609133248',
'sign':' b78270339ca72725d073e6b75887ee9a',
'lts': '1629960913324',
'bv': 'fc41b27ce835a3ef91482b3bc56520d8',
'doctype':' json',
'version': '2.1',
'keyfrom':' fanyi.web',
'action': 'FY_BY_REALTlME'}
#请求表单数据
response=requests.post(url,data=payload)
#将json格式字符串转字典
content = json.loads(response.text)
#打印翻译过后的数据
print(content['translateResult'][0][0]['tgt'])
if_name__=='_main_':
get_translate-date('我爱数据')

三、使用Beautiful Soup解析网页

通过requests库可以抓到网页源码,接下来就是从源码中找到并提取数据。Beautiful Soup是python中的一个库,其最主要的功能就是从网页中抓取数据。Beautiful Soup已经被移植到bs4中,我们需要提前安装好bs4库。

Beautiful Soup库能够轻松解析网页信息,它被移植到bs4中,需要时可以从bs4中调用,表达语句如下。

from bs4 import BeautifulSoup

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值