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

初识爬虫2

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.kler.cn/news/306202.html

相关文章:

  • Linux删除SSH生成的密钥对
  • 探索Python的Excel世界:openpyxl的魔法之旅
  • 【homebrew安装】踩坑爬坑教程
  • 路由策略原理与配置
  • C#笔记11 获取线程及其信息,什么是优先级、单元状态、线程状态、执行状态、线程名称以及其他属性?
  • 一文速通calcite结合flink理解SQL从文本变成执行计划详细过程
  • Kubernetes Pod镜像的3种状态
  • STM32-UART配置注释
  • 标准库标头 <bit>(C++20)学习
  • 计算机网络 --- 计算机网络性能【七大性能指标】
  • 如何精确统计Pytorch模型推理时间
  • c语言写的环形队列
  • emWin5的图片半透明之旅
  • 高级java每日一道面试题-2024年9月12日-架构篇[DDD领域驱动篇]-如何使用领域驱动设计(DDD)中的事务脚本模式?
  • Spring4-IoC2-基于注解管理bean
  • comfyui中,sam detector与yoloworld图像分割算法测试以及影响
  • [极客大挑战 2019]PHP
  • 1、常用的数据库、表操作
  • 蒸!--数据在内存中的存储
  • node express 开启多进程
  • python多线程程序设计 之二
  • C#获取计算机信息
  • C++入门基础知识68(高级)——【关于C++ 异常处理】
  • 【系统架构设计师-2010年真题】案例分析-答案及详解
  • Superset二次开发之源码asyncEvent.ts 分析
  • 嵌入式C语言自我修养:C语言的面向对象编程思想
  • 问题 H: 三角数
  • 【在Linux世界中追寻伟大的One Piece】五种IO模型和阻塞IO
  • 13. 神经网络基本骨架--nn.Module
  • 长业务事务的离线并发问题