爬虫基础学习
- 爬虫概念与工作原理
爬虫是什么:爬虫(Web Scraping)是自动化地访问网站并提取数据的技术。它模拟用户浏览器的行为,通过HTTP请求访问网页,解析HTML文档并提取有用信息。
爬虫的基本工作流程:
发送HTTP请求
获取响应数据(HTML、JSON等)
解析网页内容
提取和存储数据
处理反爬虫机制(如验证码、IP封锁等)
- Python爬虫基础
requests库:requests是一个Python库,用于发送HTTP请求并获取响应数据。
解析HTML内容:
学习如何使用BeautifulSoup库来解析HTML网页。
提取网页中的特定元素(如标题、链接、图片等)。
-
HTML、CSS、JS和DOM基础
HTML:了解HTML的基本结构,标签(如、 、)和属性(如href、src)。
CSS:了解如何使用CSS选择器定位页面元素。
JS和DOM:理解动态网页的加载方式及其与爬虫的关系。有些网页内容是由JavaScript动态渲染的,爬虫需要处理这些动态内容。 -
正则表达式:
学习如何使用正则表达式(re模块)来提取网页中的特定数据,例如价格、日期等。 -
爬虫调试与反爬虫技术
调试工具:学会使用浏览器的开发者工具(F12)来检查网页的网络请求、HTML结构、加载过程等。
User-Agent:模拟浏览器的User-Agent,避免被网站识别为爬虫。
IP封锁与代理:如果你遇到IP封禁问题,可以学习如何使用代理IP来绕过限制
import requests
import time
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager#from webdriver_manager.chrome import ChromeDriverManager# # 设置请求头,模拟浏览器访问,避免被反爬虫机制拦截
# headers = {
# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
# }# # 发送GET请求获取页面
# url = 'https://www.amazon.com/gp/new-releases/?ref_=nav_cs_newreleases'
# response = requests.get(url, headers=headers)# # 检查响应状态码
# if response.status_code == 200:
# # 不直接打印全部响应内容,而是打印前100个字符
# # print("响应内容预览:", response.text[:100])
# # print("页面加载成功!")
# # print(f"状态码:{response.status_code}")# with open('response.txt', 'w', encoding='utf-8') as f:
# f.write(response.text)
# print("页面加载成功!")
# print(f"状态码:{response.status_code}")
# print("响应内容已保存到 response.txt 文件中")
# else:
# print(f"请求失败,状态码:{response.status_code}")# # 获取网页内容
# soup = BeautifulSoup(response.text, 'html.parser')# # 解析页面中的新发布产品,假设产品名称和价格在特定的HTML元素中
# # 这里只是一个简单的示例,实际可能需要根据页面的结构调整选择器# 使用Selenium打开网页
# service = Service(executable_path='E:\\adfg\\chromedriver.exe')
# driver = webdriver.Chrome(service=service)# 使用 webdriver_manager 自动安装匹配的 ChromeDriver
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)# driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
# 获取页面源码
driver.get('https://www.amazon.com/gp/new-releases/?ref_=nav_cs_newreleases')
time.sleep(10)
page_source = driver.page_sourcesoup = BeautifulSoup(page_source, 'html.parser')# #纯文本
# soup_text = soup.get_text()
# print(soup_text)# 获取HTML原始文本
soup_text = str(soup)
#print(soup_text)with open('soup.txt', 'w', encoding='utf-8') as a:a.write(soup_text)# 关闭浏览器
driver.quit()# 提取产品名称作为示例
product_titles = soup.find_all('div', class_="p13n-sc-truncate-desktop-type2 p13n-sc-truncated")# 遍历所有找到的元素
# print(product_titles)
# for product_title in product_titles:
# product_title = product_title.get_text(strip=True) # 获取文本并去除空白 get_text获取的标题有可能被截断
# print(product_title)for product_title in product_titles:# 尝试获取完整的title属性full_title = product_title.get('title') or product_title.get_text(strip=True)print(full_title)# 获取产品价格
product_prices = soup.find_all('span', class_='_cDEzb_p13n-sc-price_3mJ9Z') # 根据网页结构查找价格
#print("\n产品价格:")
for idx, price in enumerate(product_prices[:10]): # 获取前10个价格print(f"{idx + 1}. Price: {price.get_text()}")
- 请求失败或获取不到数据
问题:尝试获取网页内容时,获取到的页面内容为空或页面结构未更新。
解决方案:
确认请求状态码(如 200)以确保请求成功。
使用开发者工具(F12)检查请求和响应,确保正确获取目标数据。
如果是动态页面,使用 Selenium 或 Playwright 等工具模拟浏览器行为来获取渲染后的内容。 - 动态加载的内容
问题:页面内容由 JavaScript 渲染,requests 和 BeautifulSoup 无法正确获取到这些内容。
解决方案:
使用 Selenium 等浏览器自动化工具,等待 JavaScript 执行完成,获取渲染后的完整 HTML。
通过查看开发者工具中的 Network 选项卡,找到 AJAX 请求的 API 接口,直接请求返回的 JSON 数据。 - 反爬虫机制
问题:网站通过检测 User-Agent、限制请求频率、验证码等方式阻止爬虫抓取。
解决方案:
User-Agent 伪装:通过设置不同的 User-Agent 来模拟浏览器行为,避免被识别为爬虫。
IP 代理池:使用代理池轮换 IP,避免因频繁请求同一 IP 被封禁。
验证码处理:利用 OCR 技术(如 Tesseract)或第三方验证码识别服务(如 2Captcha)来绕过验证码。
相关文章:
爬虫基础学习
爬虫概念与工作原理 爬虫是什么:爬虫(Web Scraping)是自动化地访问网站并提取数据的技术。它模拟用户浏览器的行为,通过HTTP请求访问网页,解析HTML文档并提取有用信息。 爬虫的基本工作流程: 发送HTTP请求…...

C++对象数组对象指针对象指针数组
一、对象数组 对象数组中的每一个元素都是同类的对象; 例1 对象数组成员的初始化 #include<iostream> using namespace std;class Student { public:Student( ){ };Student(int n,string nam,char s):num(n),name(nam),sex(s){};void display(){cout<&l…...
D96【python 接口自动化学习】- pytest进阶之fixture用法
day96 pytest的fixture详解(三) 学习日期:20241211 学习目标:pytest基础用法 -- pytest的fixture详解(三) 学习笔记: fixture(scop"class") (scop"class") 每一个类调…...

【算法】动态规划中01背包问题解析
📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…...

选择WordPress和Shopify:搭建对谷歌SEO友好的网站
在建设网站时,不仅要考虑它的美观和功能性,还要关注它是否对谷歌SEO友好。如果你希望网站能够获得更好的搜索排名,WordPress和Shopify是两个值得推荐的建站平台。 WordPress作为最流行的内容管理系统,其强大的灵活性和丰富的插件…...
代理IP与生成式AI:携手共创未来
目录 代理IP:网络世界的“隐形斗篷” 1. 隐藏真实IP,保护隐私 2. 突破网络限制,访问更多资源 生成式AI:创意与效率的“超级大脑” 1. 提高创作效率 2. 个性化定制 代理IP与生成式AI的协同作用 1. 网络安全 2. 内容创作与…...
iOS 应用的生命周期
Managing your app’s life cycle | Apple Developer Documentation Performance and metrics | Apple Developer Documentation iOS 应用的生命周期状态是理解应用如何在不同状态下运行和管理资源的基础。在 iOS 开发中,应用生命周期管理的是应用从启动到终止的整…...
Elasticsearch 集群快照的定期备份设置指南
Elasticsearch 集群快照的定期备份设置指南 概述 快照: 在给定时刻对整个集群或者单个索引进行备份,以便在之后出现故障时可以基于之前备份的快照进行快速恢复。 前提条件: 准备一个备份存储盘,本指南采用的是AWS EFS文件系统做…...

Docker--Docker Image(镜像)
什么是Docker Image? Docker镜像(Docker Image)是Docker容器技术的核心组件之一,它包含了运行应用程序所需的所有依赖、库、代码、运行时环境以及配置文件等。 简单来说,Docker镜像是一个轻量级、可执行的软件包&…...
C++ 中的序列化和反序列化
一、C 中的序列化和反序列化 (一)基本概念 在 C 中,序列化是将对象转换为字节流的过程,反序列化则是从字节流重新构建对象的过程。这对于存储对象状态到文件、网络传输等场景非常有用。 (二)简单的序列化…...

我的Github学生认证申请过程
先说结论:很简单。 学生认证链接:GitHub Education GitHub 1. 首先你得绑定edu邮箱。这个应该没什么问题,Github也会提示。 2. 我是在学校里面、使用流量而非WiFi申请的,听说地理位置很重要,该给的权限(…...
信奥题解:勾股数计算中的浮点数精度问题
来源:GESP C++ 二级模拟题 本文给出官方参考答案的详细解析,包括每一部分的功能和关键点,以及与浮点数精度相关的问题的分析。 题目描述 勾股数是很有趣的数学概念。如果三个正整数a 、b 、c ,满足 a 2 + b 2 = c 2 a^2 + b^2 = c^2 a2+b2=c2 ,而且1 ≤ a ≤ b ≤ c ,…...
重生之我在学Vue--第2天 Vue 3 Composition API 与响应式系统
重生之我在学Vue–第2天 Vue 3 Composition API 与响应式系统 文章目录 重生之我在学Vue--第2天 Vue 3 Composition API 与响应式系统前言一、Composition API 核心概念1.1 什么是 Composition API?1.2 Composition API 的核心工具1.3 基础用法示例 二、响应式系统2…...

【AI知识】逻辑回归介绍+ 做二分类任务的实例(代码可视化)
1. 分类的基本概念 在机器学习的有监督学习中,分类一种常见任务,它的目标是将输入数据分类到预定的类别中。具体来说: 分类任务的常见应用: 垃圾邮件分类:判断一封电子邮件是否是垃圾邮件 。 医学诊断:…...
Mysql 笔记2 emp dept HRs
-- 注意事项 -- 1.给数据库和表起名字时尽量选择全小写 -- 2.作为筛选条件的字符串是否区分大小写看设置的校对规则utf8_bin 区分 drop database if exists hrs; create database hrs default charset utf8 collate utf8_general_ci;use hrs; drop table if exists tb_emp; dro…...
MySQL和Oracle的区别
MySQL和Oracle的区别 MySQL是轻量型数据库,并且免费,没有服务恢复数据。 Oracle是重量型数据库,收费,Oracle公司对Oracle数据库有任何服务。 1.对事务的提交 MySQL默认是自动提交,而Oracle默认不自动提交࿰…...

实验12 C语言连接和操作MySQL数据库
一、安装MySQL 1、使用包管理器安装MySQL sudo apt update sudo apt install mysql-server2、启动MySQL服务: sudo systemctl start mysql3、检查MySQL服务状态: sudo systemctl status mysql二、安装MySQL开发库 sudo apt-get install libmysqlcli…...

09篇--图片的水印添加(掩膜的运用)
如何添加水印? 添加水印其实可以理解为将一张图片中的某个物体或者图案提取出来,然后叠加到另一张图片上。具体的操作思想是通过将原始图片转换成灰度图,并进行二值化处理,去除背景部分,得到一个类似掩膜的图像。然后…...

sql-labs(21-25)
第21关 第一步 可以发现cookie是经过64位加密的 我们试试在这里注入 选择给他编码 发现可以成功注入 爆出表名 爆出字段 爆出数据 第22关 跟二十一关一模一样 闭合换成" 第 23 关 第二十三关重新回到get请求,会发现输入单引号报错,但是注释符…...

CTF知识集-命令执行
CTF知识集-命令执行 写在开头可能会用到的提醒 ;可以用%0a来替换 是shell_exec的缩写 ls | tee 1 把ls的输出内容存入1这个文件 shell查看文件的几种方式,tac | more | less | tail | sort | tac | cat | head | od | expand 针对flag 可以用grep { flag.php来…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》
近日,嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,海云安高敏捷信创白盒(SCAP)成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解…...