python爬虫基础之简易网页搜集器

作者:世界的隐喻 时间:2023-08-25 14:05:17 

简易网页搜集器

前面我们已经学会了简单爬取浏览器页面的爬虫。但事实上我们的需求当然不是爬取搜狗首页或是B站首页这么简单,再不济,我们都希望可以爬取某个特定的有信息的页面。

不知道在学会了爬取之后,你有没有跟我一样试着去爬取一些搜索页面,比如说百度。像这样的页面

python爬虫基础之简易网页搜集器

注意我红笔划的部分,这是我打开的网页。现在我希望能爬取这一页的数据,按我们前面学的代码,应该是这样写的:


import requests

if __name__ == "__main__":
   # 指定URL
   url = "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=2&tn=93923645_hao_pg&wd=%E5%A5%A5%E7%89%B9%E6%9B%BC&rsv_spt=1&oq=%25E7%2588%25AC%25E5%258F%2596%25E7%2599%25BE%25E5%25BA%25A6%25E9%25A6%2596%25E9%25A1%25B5&rsv_pq=b233dcfd0002d2d8&rsv_t=ccdbEuqbJfqtjnkFvevj%2BfxQ0Sj2UP88ixXHTNUNsmTa9yWEWTUEgxTta9r%2Fj3mXxDs%2BT1SU&rqlang=cn&rsv_dl=tb&rsv_enter=1&rsv_sug3=8&rsv_sug1=5&rsv_sug7=100&rsv_sug2=0&rsv_btype=t&inputT=1424&rsv_sug4=1424"

# 发送请求
   response = requests.get(url)

# 获取数据
   page_text = response.text

# 存储
   with open("./奥特曼.html", "w", encoding = "utf-8") as fp:
       fp.write(page_text)

print("爬取成功!!!")

然而打开我们保存的文件,发现结果跟我们想的不太一样

python爬虫基础之简易网页搜集器

我们发现我们保存的文件是一个空白的页面,这是为什么呢?

其实上我们把网址改成搜狗的可能或更直观一些(不知道为什么我这边的搜狗总是打不开,所以就用百度做例子,可以自己写写有关搜狗搜索的代码),同样的代码改成搜狗的网址结果是这样的

python爬虫基础之简易网页搜集器

我们发现其中有句话是 “ 网络中存在异常访问 ”,那么这句话是什么意思呢?

这句话的意思就是说,搜狗或是百度注意到发送请求的是爬虫程序,而不是人工操作。

那么这其中的原理又是什么呢?

简单来说,就是程序访问和我们使用浏览器访问是有区别的,被请求的服务器都是靠 user-agent 来判断访问者的身份,如果是浏览器就接受请求,否则就拒绝。这就是一个很常见的反爬机制。

那是不是我们就没有办法呢?

非也~所谓魔高一尺,道高一丈。既然要识别 user-agent ,那么我们就让爬虫模拟 user-agent 好了。

在 python 中模拟输入数据或是 user-agent ,我们一般用字典

就这样子写:


header = {
"user-agent": "" # user-agent 的值 是一个长字符串
}

那么 user-agent 的值又是怎么得到的呢?

1. 打开任意网页,右键点击,选择“检查”

python爬虫基础之简易网页搜集器

2. 选择“ Network ”(谷歌浏览器)(如果是中文,就选择 “网络” 这一项)

python爬虫基础之简易网页搜集器

3. 如果发现点开是空白的,像这样,那就刷新网页

python爬虫基础之简易网页搜集器

刷新后是这样的:

python爬虫基础之简易网页搜集器

然后随机选择红笔圈起来的一项,我们会看到这样的东西,然后在里面找到“user-agent”,把它的值复制下来就行了

python爬虫基础之简易网页搜集器

有了 “user-agent”, 我们在重新写我们的爬取网页的代码,就可以了


import requests

if __name__ == "__main__":
   # 指定URL
   url = "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=2&tn=93923645_hao_pg&wd=%E5%A5%A5%E7%89%B9%E6%9B%BC&rsv_spt=1&oq=%25E7%2588%25AC%25E5%258F%2596%25E7%2599%25BE%25E5%25BA%25A6%25E9%25A6%2596%25E9%25A1%25B5&rsv_pq=b233dcfd0002d2d8&rsv_t=ccdbEuqbJfqtjnkFvevj%2BfxQ0Sj2UP88ixXHTNUNsmTa9yWEWTUEgxTta9r%2Fj3mXxDs%2BT1SU&rqlang=cn&rsv_dl=tb&rsv_enter=1&rsv_sug3=8&rsv_sug1=5&rsv_sug7=100&rsv_sug2=0&rsv_btype=t&inputT=1424&rsv_sug4=1424"

# 模拟 “user-agent”,即 UA伪装
   header = {
       "user-agent" : "" # 复制的 user-agent 的值
       }
   # 发送请求
   response = requests.get(url, headers = header)

# 获取数据
   page_text = response.text

# 存储
   with open("./奥特曼(UA伪装).html", "w", encoding = "utf-8") as fp:
       fp.write(page_text)

print("爬取成功!!!")

再次运行,然后打开文件

python爬虫基础之简易网页搜集器

这次成功了,说明我们的爬虫程序完美地骗过了服务器

来源:https://blog.csdn.net/ShiJieDeYinYu/article/details/115713287

标签:python,网页搜集器,爬虫
0
投稿

猜你喜欢

  • Vue中qs插件的使用详解

    2023-07-02 17:07:06
  • 隐蔽的ASP后门 大家可以查看下

    2010-08-05 21:26:00
  • Python之reload流程实例代码解析

    2022-04-19 11:42:24
  • 使用python编写简单计算器

    2023-08-27 17:07:46
  • 在Web关闭页面时发送Ajax请求的实现方法

    2024-04-18 10:14:37
  • Python使用Keras OCR实现从图像中删除文本

    2022-07-22 20:50:24
  • ASP调用系统ping命令代码

    2008-04-27 20:45:00
  • matplotlib 输出保存指定尺寸的图片方法

    2021-09-06 11:29:12
  • apache集成php7.3.5的详细步骤

    2023-08-20 16:31:05
  • python猜数字小游戏实现代码

    2022-04-20 19:01:43
  • js判断手机和pc端选择不同执行事件的方法

    2024-04-29 13:45:46
  • Web 2.0 框架发布

    2008-03-25 09:40:00
  • FlippingBook使用教程(附下载)

    2023-09-26 20:48:25
  • Mysql视图和触发器使用过程

    2024-01-15 22:15:46
  • python中redis的安装和使用

    2021-02-21 23:19:44
  • python对象转字典的两种实现方式示例

    2023-12-06 15:47:05
  • 使用PyInstaller将Python程序文件转换为可执行程序文件

    2023-03-28 11:35:34
  • python可以用哪些数据库

    2024-01-19 11:43:51
  • ubuntu20.04配置mysql8.0的实现步骤

    2024-01-28 14:56:16
  • 通过索引优化含ORDER BY的MySQL语句

    2010-03-13 12:20:00
  • asp之家 网络编程 m.aspxhome.com