一、用get请求爬取一般网页
首先由上节课我们可以找到URL、请求方式、User-Agent以及content-type
即:在所在浏览器页面按下F12键,之后点击网路-刷新,找到第一条双击打开标头即可查看上述所有内容,将上述URL、User-Agent所对应的值复制下来
例如我们想爬取下面这个页面
那么我们只需按下F12,按照我前面讲的,找到其URL、User-Agent,以及请求方式和内容格式,
分别如下:
1、
2、
3、
4、
以上便是爬取网页的关键用具了,接下来将开始写代码去爬取他的页面
首先我们获取了URL,那么变要进行get请求,但是我们需要有一个身份来获取网页的数据,如果不伪装一个身份,而直接以编译器的形式去爬取,大多数网页会识别到你是个爬虫,是个小偷,想要过来偷取我的数据,会直接将你驱逐出去,而不让你爬取他的数据,所以我们就使用UA伪装的方法去将自己伪装成一个浏览器,这样多数的网页就不会驱逐你,是你能够用爬取数据。
完成UA伪装后使用get请求,得到url对应的网页数据,就用content-type上看到的方式去打印这段数据,代码如下:
import requests
head = { #进行UA伪装
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
}
url = "https://www.sogou.com/web?query=刘亦菲"
# 2、发送请求 get带参数使用params参数
response = requests.get(url, headers=head)
#打印数据,以content-type中写的方式去打印
print(response.text)
输出结果为:很长很长的数据
以上就是基础的打印出来了这个网页的所有数据,那么接下来就要将这段数据保存下来,然后对这段数据进行处理:
import requests
head = { #进行UA伪装
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
}
url = "https://www.sogou.com/web?query=刘亦菲"
# 2、发送请求 get带参数使用params参数
response = requests.get(url, headers=head)
#打印数据,以content-type中写的方式去打印
with open("./dilireba.html", "w", encoding="utf8") as fp:
fp.write(response.text)
print(type(response.text))
即将那一幅大串的数据存入html文件,dilireba.html,html是一个网页的原码存放文件,在左侧文件夹中找到这个文件并打开,
可以发现右上角有几个浏览器的logo,点击电脑里有的那个即可直接打开这个网页,得到如下结果
此时虽然页面摸样和之前那个一样,但是注意地址栏的地址,显示的是本地地址,即说明当前这个页面爬取成功,这看起来没什么用,但是后面我们会慢慢讲解为什么,比如从卖二手车的网页爬取车辆的图片以及名称报价,以及爬取网页的vip视频,小说的全部内容等等
下面是定义函数的方法去写上述的代码,仅供参考
import requests #导入爬虫库
head = { #进行UA伪装
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
}
# 这是get请求带参数的模式
def get_param():
# 1、url
url = "https://www.sogou.com/web?"
# 2、发送请求 get带参数使用params参数
response = requests.get(url, headers=head, params={"query": "刘亦菲"})
# 3、获取想要的数据
with open("./dilireba.html", "w", encoding="utf8") as fp:
fp.write(response.text)
print(type(response.text))
if __name__ == '__main__':
get_param()