Python 爬虫基础学习-(爬取搜索引擎首页的小爬虫,web请求过程剖析)

直接跳过安装软件阶段。

爬虫本质上通过程序获取互联网上的资源。

在python中直接用urllib模块完成对浏览器的模拟工作。

from urllib.request import urlopen
#获取一个包叫做urllib的,里面可以请求点击网页。
url = 'http://www.baidu.com'  #选择一个百度的网页
reqs= urlopen(url) #很好理解的是,打开一个链接,并把信息传给reqs
with open('myfrist_test.html',mode = 'w') as f:  #用with打开一个软件
    f.write(reqs.read().encode('utf-8'))
print('done!')

首先引入一个包叫做urllib的request,理解为网页请求的包

urlopen的意思是打开一个网页链接。

打开之后肯定是无法让人直接看到,可以加上一个read()读取里面的信息,并用decode转码。

with open将打开的信息作为一个html文件保存起来。

web请求过程剖析,可以在搜索引擎当中搜索你想要的信息啦

区分为服务器渲染和客户端渲染。

服务器渲染客户端渲染
第一次就能看到源代码

第一次获取的是一个html骨架

第二次返回源数据

如何查看网页中的关键信息,我们从搜狗的信息中找去信息。

 我们用搜狗搜索随便搜些东西,这里用搜素信息篮球为例。

先了解一些前提知识在http页面中,有请求头和响应头,分别在检查页面的

客户端提交信息分为get的显示提交和post的隐式提交。

 点击进去之后,可以看到网页对于你的搜索保存了哪些信息。

这里引用到的包是requests,可以知道的是这个网页在搜索的时候是用https://www.sogou.com/web?query=搜索内容来进行搜索的,然后看到

查看general我们知道这里用的是get 的显示提交,于是写代码有。

import requests

url = 'https://www.sogou.com/web?query=篮球'

reqs = requests.get(url= url1)
print(reqs)
reqs.close()

不过这里肯定会报错,搜索端回认为我们是用的软件爬去信息,不是人工操作。判定的方法可以用requests.url()确定,由于requests的封装已经很好,直接将user-Agents复制下来输入到headers里面就好。

import requests
url = 'https://www.sogou.com/web?query=篮球'
Use_info = {
    "User-Agent":"Mozilla/5.0 ()  (KHTML, like Gecko) Chrome/"
}
reqs = requests.get(url= url1,headers= Use_info)
print(reqs)
reqs.close()

可以看到与我们想要的页面相同的信息。

接下来看看隐式提交post,这次是提交百度查询信息, 要注意一个引擎里面有显式提交也有饮隐式提交,所以需求准确定位到你想要得到的信息,否则就会出问题。     

 

这个里搜索到的百度翻译中的sug页面。 

#使用的是百度翻译页面。
import requests
url2 = 'https://fanyi.baidu.com/sug'
words = input('你想要查什么信息')
dat = {
    'kw':words   
}
#发送post请求,发送的数据必须放在字典当中。
trans = requests.post(url2, data= dat)
print(trans.json()) #将服务器返回的内容直接处理成json() 
trans.close()

这里用到的是豆瓣的排行榜搜索页面。

#douban 
import requests 
import pprint
#如果你发现自己发出的get请求参数有点长,可以重新封装
url3 = "https://movie.douban.com/j/chart/top_list"
#重新封装参数
Use_info = {
    "User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
}
for i in range(1,5):
    param = {
        "type": "24",
        "interval_id": "100:90",
        "action":"" ,
        "start":i,
        "limit":20,
    }
    request2 = requests.get(url= url3,params = param,headers = Use_info)
    pprint.pprint('第{0}页内容{1}'.format(i,request2.json()))
request2.close()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值