初识爬虫2

news2024/11/24 15:56:10

requests学习(未更新完):

小技巧,如果你用的也是pycharm,对于控制台输出页面因为数据很长一行,不方便进行查看,

可以让它自动换行:

1.requests文档阅读学习链接:快速上手 — Requests 2.18.1 文档

需掌握

 2.发送请求和获取响应

# -*- coding: utf-8 -*-
# 安装:pip install requests
import requests
url = 'https://www.baidu.com'
response = requests.get(url)
# response是string类型,编码格式可能出现问题
# 方法一:
# response.encoding = 'utf8'
# print(response.text)

# 方法二:
# content存储的是bytes类型的响应源码
# decode()默认utf-8 常见编码字符集:utf-8 gbk gb2312 ascii iso-8859-1
print(response.content.decode())

# 常见的响应对象参数与方法
# 响应url
# print(response.url)

# 状态码
# print(response.status_code)

# 响应头的请求头
# print(response.request.headers)
# 响应头
# print(response.headers)

# 答应响应设置cookies
# print(response.cookies)

3.发送带请求头的参数(上一篇讲到的重点user-agent)

# -*- coding: utf-8 -*-
import requests
# ctrl+点击 可实现跳转
url = 'https://www.baidu.com'
# response = requests.get(url)
#
# print(len(response.content.decode()))
# print(response.content.decode())

# headers参数的使用,伪装 user-agent
# 构建请求头字典
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36'}
# 发送带请求头的请求
response1=requests.get(url,headers=headers)
print(len(response1.content.decode()))
print(response1.content.decode())

 4.发送带参数的请求

        4.1 url中直接带参数

        4.2 通过params携带参数字典

百度搜索python,可以发现访问链接是一个长串,其实里面很多是广告的插入:

可以从末尾&删除找到依次删除,最后得到:

 

# -*- coding: utf-8 -*-
import requests

import requests
import time

# 方法一:url中直接带参数
url = 'https://www.baidu.com/s?wd=python'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
}

# 加一个延迟
time.sleep(2)

response = requests.get(url, headers=headers)

with open('baidu.html', 'wb') as f:
    f.write(response.content)

# 方法二:使用params参数
# url = 'https://www.baidu.com/s?'
# headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36'}
#
# #构建参数字典
# data = {'wd': 'python'}
#
# response = requests.get(url, headers=headers, params=data)
# print(response.url)
# with open('baidu1.html', 'wb') as f:
#     f.write(response.content)

因为百度加强了反爬机制, 上面代码得到的html文件并不含有需要的

<title>python_百度搜索</title>

尝试更换 User-Agent,适当降低请求频率:

import requests  
import time  

# 方法一:url中直接带参数  
url = 'https://www.baidu.com/s?wd=python'  
headers = {  
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'  
}  

# 加一个延迟  
time.sleep(2)  

response = requests.get(url, headers=headers)  

with open('baidu.html', 'wb') as f:  
    f.write(response.content)

还是没有解决,最后只能使用 Selenium 进行浏览器自动化,我这用的edge,也可以chrome.

# -*- coding: utf-8 -*-
# 安装:pip install selenium
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
import time

# 设置 Edge 选项
edge_options = Options()
edge_options.add_argument("--headless")  # 无头模式,不显示浏览器界面
edge_options.add_argument("--no-sandbox")
edge_options.add_argument("--disable-dev-shm-usage")

# 创建 Edge 驱动
service = Service('E:\\edgedriver\\msedgedriver.exe')  # 替换为你的 msedgedriver 路径
driver = webdriver.Edge(service=service, options=edge_options)

# 打开百度搜索
driver.get('https://www.baidu.com/s?wd=python')

# 等待页面加载
time.sleep(3)

# 获取页面源代码
html = driver.page_source

# 保存到文件
with open('baidu_search_results.html', 'w', encoding='utf-8') as f:
    f.write(html)

# 关闭浏览器
driver.quit()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2122910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux 脱机

先安装 screen apt-get install screen

【网络】网络通信的传输方式

目录 1.网络通信中的两种基本通信模式 1.1.怎么理解连接 1.2.面向有连接类型 1.3.面向无连接类型 2.实现这两种通信模式的具体交换技术 2.1.电路交换 2.2.分组交换 3.根据接收端数量分类 单播&#xff08;Unicast&#xff09; 广播&#xff08;Broadcast&#xff09; …

8、值、指针、引用作为参数或返回值

一、作为参数 1、值传递 #include <iostream> using namespace std;void swap(int a, int b) {cout << __FUNCTION__ << "交换前a:" << a << " b:" << b << endl;int tmp a;a b;b tmp;cout << __FUN…

98.游戏的启动与多开-分析与实现多开器

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;97.游戏的启动与多开-共享内存多开检测 以 97.游戏的启动与多开-共享内存多开检测 它的…

若依框架开发

若依环境 介绍 ‌若依是一款快速开发平台(低代码)&#xff0c;用于快速构建企业级后台管理系统&#xff0c;它提供了许多常用的功能模块和组件&#xff0c;包括权限管理、代码生成、工作流、消息中心等 官方地址: https://www.ruoyi.vip/ ‌基于Spring Boot和Spring Cloud‌…

vscode配置C/C++环境(保姆级详细教程)

一. 引言 VSCode&#xff0c;全称为Visual Studio Code&#xff0c;是一款由微软开发的免费、开源的轻量级代码编辑器&#xff0c;它支持多种编程语言和平台&#xff0c;并提供丰富的扩展功能&#xff0c;让开发者能够更高效地编写代码。 大家能来搜用如何在VSCode配置C/C环境…

Linxu系统:kill命令

1、命令详解&#xff1a; kill命令是用于向进程发送信号&#xff0c;通常用来终止某个指定PID服务进程&#xff0c;kill命令可以发送不同的信号给目标进程&#xff0c;来实现不同的操作&#xff0c;如果不指定信号&#xff0c;默认会发送 TERM 信号&#xff08;15&#xff09;&…

1. 初识LLM API:环境配置与多轮对话演示

其实AI应用并不是一个什么很高大上的东西&#xff0c;你可以将它当作一个文字的“调库”行为&#xff0c;“调库”只需要知道库名就行了&#xff0c;这里实际也是如此。甚至你只需要知道你想问什么&#xff0c;将你的消息作为输入&#xff0c;就能从大模型得到输出。而这个“库…

CSS学习17--CSS3 过渡、2D变形、3D变形、动画

CSS3 过渡、2D变形、3D变形、动画 一、过渡二、2D变形 transform1.移动 translate2.缩放 scale3. 旋转 rotate4. 倾斜 skew 三、3D变形1. rotateX&#xff08;&#xff09;rotateY&#xff08;&#xff09; rotateZ&#xff08;&#xff09;2. 体会透视 perspective3. translat…

直播电商系统卷轴模式源码开发的发展前景

随着互联网技术的飞速发展和直播电商的日益兴起&#xff0c;直播电商系统已成为数字经济的重要组成部分。其中&#xff0c;卷轴模式作为一种结合了积分奖励和任务兑换机制的商业模式&#xff0c;正逐渐在直播电商领域崭露头角&#xff0c;并展现出广阔的发展前景。本文将从卷轴…

【腾讯云】AI驱动的数据库TDSQL-C如何是从0到1体验电商可视化分析小助手得统计功能,一句话就能输出目标统计图

欢迎来到《小5讲堂》 这是《腾讯云》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景效果图流程图创建数据库基本信息数据库配置设置密码控制台开启…

学工控必须知道的变频器字母符号

#变频器##变频器故障##伺服电机##电工##电工#工控人加入PLC工业自动化精英社群 工控人加入PLC工业自动化精英社群

windows软件应该安装在哪里

100%原创动力 文章目录 前言一、安装路径二、数据文件夹1.用户文件夹2.AppData 三、为什么需要管理员权限四、绿色软件 前言 windows软件应该安装在哪里 一、安装路径 windows系统安装软件应该安装在哪里&#xff0c;根据windows规范应该安装在某个盘的 Program Files 目录…

ICP备案办理的流程中股东附件不显示如何解决

ICP备案办理的流程中股东附件不显示如何解决 问题解决方案注意吐槽 问题 问题弹窗&#xff1a; 部分一级股东没有上传证照附件,请检查并上传。 问题内容&#xff1a; 在【股东追溯及其相关证明材料】这一页中无法保存&#xff0c;提示要上传证照附件&#xff0c;但这边找不到任…

dwg2text抽取dwg文件文字不完整分析

libdxfrw项目中dxf2text命令可以抽取dwg文件中的文字部分&#xff0c;编译完工程后对手头上的dwg文件提取时发现抽取不完整&#xff0c;对源码进行分析时发现该命令只处理了text部分&#xff0c;不处理mtext部分 bool dx_iface::printText(const std::string& fileI, dx_da…

Cross-Encoder实现文本匹配(重排序模型)

引言 前面几篇文章都是基于表示型的方法训练BERT进行文本匹配&#xff0c;而本文是以交互型的方法。具体来说&#xff0c;将待匹配的两个句子拼接成一个输入喂给BERT模型&#xff0c;最后让其输出一个相似性得分。 文本匹配系列文章先更新到此&#xff0c;目前为止都是基于监督…

AI大模型行业专题报告:大模型发展迈入爆发期,开启AI新纪元

大规模语言模型&#xff08;Large Language Models&#xff0c;LLM&#xff09;泛指具有超大规模参数或者经过超大规模数据训练所得到的语言模型。与传统语言模型相比&#xff0c;大语言模型的构建过程涉及到更为复杂的训练方法&#xff0c;进而展现出了强大的自然语言理解能力…

网络药理学:1、文章基本思路、推荐参考文献、推荐视频

文章基本思路 选择一味中药或者中药复方&#xff08;常见的都是选择一味中药&#xff0c;如&#xff1a;大黄、银柴胡等&#xff09;&#xff0c;同时选择一个要研究的疾病&#xff08;如食管癌等&#xff09;获得中药的主要化学成分或者说活性成分&#xff08;有时候也以化合…

一款专为网络专业人士设计的多功能扫描工具,支持主机存活探测、端口扫描、服务爆破、漏洞扫描等功能

前言 在网络维护和安全检测中&#xff0c;有效的工具对于提高-效率至关重要。传统的网络扫描工具往往功能单一&#xff0c;需要多个工具配合使用&#xff0c;这不仅增加了工作的复杂度&#xff0c;还可能因为工具间的兼容性问题导致工作效率下降。面对这样的挑战&#xff0c;我…

深度解析 | 二元Logistic回归模型(单因素筛查、软件操作及结果解读)

一、Logistic回归的类型 Logistic回归&#xff08;又称逻辑回归&#xff09;是一种广义的线性回归分析模型&#xff0c;用于研究分类型因变量与自变量之间影响关系。Logistic回归分析根据因变量的不同可分为二元Logistic回归、多分类Logistic回归&#xff0c;有序Logistic回归…