当前位置: 首页 > news >正文

PYthon进阶--网页采集器(基于百度搜索的Python3爬虫程序)

简介:基于百度搜索引擎的PYthon3爬虫程序的网页采集器,小白和爬虫学习者都可以学会。运行爬虫程序,输入关键词,即可将所搜出来的网页内容保存在本地。

知识点:requests模块的get方法

一、此处需要安装第三方库requests:

在Pycharm平台终端或者命令提示符窗口中输入以下代码即可安装

pip install requests

二、抓包分析及编写Python代码 

        1、打开百度搜索进行抓包分析

  1. 打开百度搜索的网站
  2. 按下F12键,打开开发者界面
  3. 此时由于翻译页面没有数据传输,属于静态页面,开发者界面也就没有任何数据传输的情况
  4. 在输入框中输入要查找的关键词--周杰伦,回车
  5. 在开发者界面中可以看到有数据正在进行传输(百度搜索是局部刷新,也就是Ajax框架的异步加载)
  6. 找到第一个出现的信息,点击,查看Header信息。
  • 这里只需要用到两部分内容,一个的请求的url地址,一个是user-agent(用户识别)信息。
  • 查看url部分,我们可以看到wd=一堆乱码(对链接的构成不清楚的同学可以百度一下)。其实wd是query,也就是查询的关键词的key,一堆乱码其实就是周杰伦(也就是query的值)。百度采用了编码方式,对其进行乱码产生混淆避免他人破解。

所以在wd的值采用键盘读取关键词再复制给wd,即可搜索输入的关键词。

  • 继续在header后面向下查找user-agent,其位置在:

           2、编写请求模块 

  • requests请求模块有get方法和post方法,此处使用的是get方法。(不清楚的可以百度一下)
  • get方法里面包含多个参数(不写的话requests模块会有默认的参数),里面需要自己写明三个参数。分别为url(访问地址),header(请求头),data(请求数据)。此处由于我们不需要携带data,则我们只需要准备好url和user-agent即可。
  • 需要对url的query的值通过键盘消息输入,代码为:
keyword = input('请输入关键词:')
url= f'https://www.baidu.com/s?wd={keyword}'
  • 对user-agent只需要以字典格式封装到header中即可,代码为:
headers = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Mobile Safari/537.36'}
  • 将url和header放入get方法中, 代码如下:
response = requests.get(url=url, headers=headers)

        3、将采集到的网页保存到本地

        通过以上部分,已经获得了所查关键词的网页内容。这里进行将获得的网页内容保存到本地。

  • 只需要进行写入文件,以html格式保存即可。代码如下:
with open(keyword+'baidu.html', 'w', encoding='utf-8') as f:f.write(response.text)print(f"已下载...{keyword}")

 三、所有代码如下:

# get方法是客户端向服务器发送请求,将服务器中的信息获取下来
# 网页采集器:基于百度,编写出python爬虫程序,实现输入关键词搜索,将信息获取到本地。
# 1、导入requests请求模块
import requests
# 2、打开百度网页(也可以是其他网站),复制其链接
# 链接中被采用了其他方式进行编码:wd=为链接中的query属性,后面的乱码其实就是输入的查找的关键词
# https://www.baidu.com/s?wd=%E5%91%A8%E6%9D%B0%E4%BC%A6
# 3、在键盘中输入关键词,读取键盘消息
keyword = input('请输入关键词:')
# 4、输入url
url= f'https://www.baidu.com/s?wd={keyword}'
# 5、编写请求头,防止验证时服务器识别出是机器的操作
# user-agent就是服务器响应时识别是否为认为操作的验证方式
# 如果不写,requests模块会使用默认的user-agent,服务器容易识别出来
# 这里,我们是百度页面抓包分析,找到user-agent的值
headers = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Mobile Safari/537.36'}
response = requests.get(url=url, headers=headers)
# print(response.text)
# 4、将查找到的信息下载到本地
with open(keyword+'.html', 'w', encoding='utf-8') as f:f.write(response.text)print(f"已下载...{keyword}")

       运行以上代码即可(注:运行代码时,需要保证处于联网状态。因为requests模块会对服务器进行请求,服务器会响应数据。需要联网,才能传输数据)

基于以上内容, 可以基于360搜索(或其他搜索网站)进行编写PYthon3网页采集器爬虫程序。

   注:此贴只用于学习交流,禁止商用。

      

相关文章:

  • 引入BertTokenizer出现OSError: Can‘t load tokenizer for ‘bert-base-uncased‘.
  • G口大流量服务器选择的关键点有哪些?
  • arm 汇编积累
  • Java实现教学资源共享平台 JAVA+Vue+SpringBoot+MySQL
  • C语言第二十三弹---指针(七)
  • Android---PermissionX实现动态权限申请
  • vscode开发FPGA(0)--windows平台搭建
  • JS逆向进阶篇【去哪儿旅行登录】【上篇】
  • 意外删除照片数据?恢复照片数据的 10 大照片恢复工具方法
  • 2024/2/12 图的基础知识 2
  • 无人机飞行原理,多旋翼无人机飞行原理详解
  • 【国产MCU】-CH32V307-基本定时器(BCTM)
  • kali系统概述、nmap扫描应用、john破解密码、抓包概述、以太网帧结构、抓包应用、wireshark应用、nginx安全加固、Linux系统加固
  • 【c语言】字符串常见函数 上
  • 【QT+QGIS跨平台编译】之三十:【NetCDF+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
  • python3.6+scrapy+mysql 爬虫实战
  • Electron入门介绍
  • javascript 总结(常用工具类的封装)
  • node和express搭建代理服务器(源码)
  • October CMS - 快速入门 9 Images And Galleries
  • python 学习笔记 - Queue Pipes,进程间通讯
  • scrapy学习之路4(itemloder的使用)
  • Tornado学习笔记(1)
  • underscore源码剖析之整体架构
  • vuex 学习笔记 01
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 回顾 Swift 多平台移植进度 #2
  • 追踪解析 FutureTask 源码
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 如何用纯 CSS 创作一个货车 loader
  • 整理一些计算机基础知识!
  • ​香农与信息论三大定律
  • #define、const、typedef的差别
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $().each和$.each的区别
  • (3)nginx 配置(nginx.conf)
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net6 webapi log4net完整配置使用流程
  • .NET处理HTTP请求
  • .NET的数据绑定
  • .net对接阿里云CSB服务
  • .net连接oracle数据库
  • /boot 内存空间不够
  • /etc/motd and /etc/issue
  • [51nod1610]路径计数
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [AIGC] 如何建立和优化你的工作流?
  • [Android] 修改设备访问权限
  • [android学习笔记]学习jni编程
  • [Angular] 笔记 20:NgContent