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

爬虫基础学习

  1. 爬虫概念与工作原理
    爬虫是什么:爬虫(Web Scraping)是自动化地访问网站并提取数据的技术。它模拟用户浏览器的行为,通过HTTP请求访问网页,解析HTML文档并提取有用信息。

爬虫的基本工作流程:

发送HTTP请求
获取响应数据(HTML、JSON等)
解析网页内容
提取和存储数据
处理反爬虫机制(如验证码、IP封锁等)

  1. Python爬虫基础
    requests库:requests是一个Python库,用于发送HTTP请求并获取响应数据。

解析HTML内容:
学习如何使用BeautifulSoup库来解析HTML网页。
提取网页中的特定元素(如标题、链接、图片等)。

  1. HTML、CSS、JS和DOM基础
    HTML:了解HTML的基本结构,标签(如

    、 、)和属性(如href、src)。
    CSS:了解如何使用CSS选择器定位页面元素。
    JS和DOM:理解动态网页的加载方式及其与爬虫的关系。有些网页内容是由JavaScript动态渲染的,爬虫需要处理这些动态内容。

  2. 正则表达式:
    学习如何使用正则表达式(re模块)来提取网页中的特定数据,例如价格、日期等。

  3. 爬虫调试与反爬虫技术
    调试工具:学会使用浏览器的开发者工具(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()}")
  1. 请求失败或获取不到数据
    问题:尝试获取网页内容时,获取到的页面内容为空或页面结构未更新。
    解决方案:
    确认请求状态码(如 200)以确保请求成功。
    使用开发者工具(F12)检查请求和响应,确保正确获取目标数据。
    如果是动态页面,使用 Selenium 或 Playwright 等工具模拟浏览器行为来获取渲染后的内容。
  2. 动态加载的内容
    问题:页面内容由 JavaScript 渲染,requests 和 BeautifulSoup 无法正确获取到这些内容。
    解决方案:
    使用 Selenium 等浏览器自动化工具,等待 JavaScript 执行完成,获取渲染后的完整 HTML。
    通过查看开发者工具中的 Network 选项卡,找到 AJAX 请求的 API 接口,直接请求返回的 JSON 数据。
  3. 反爬虫机制
    问题:网站通过检测 User-Agent、限制请求频率、验证码等方式阻止爬虫抓取。
    解决方案:
    User-Agent 伪装:通过设置不同的 User-Agent 来模拟浏览器行为,避免被识别为爬虫。
    IP 代理池:使用代理池轮换 IP,避免因频繁请求同一 IP 被封禁。
    验证码处理:利用 OCR 技术(如 Tesseract)或第三方验证码识别服务(如 2Captcha)来绕过验证码。
http://www.lryc.cn/news/505476.html

相关文章:

  • C++对象数组对象指针对象指针数组
  • D96【python 接口自动化学习】- pytest进阶之fixture用法
  • 【算法】动态规划中01背包问题解析
  • 选择WordPress和Shopify:搭建对谷歌SEO友好的网站
  • 代理IP与生成式AI:携手共创未来
  • iOS 应用的生命周期
  • Elasticsearch 集群快照的定期备份设置指南
  • Docker--Docker Image(镜像)
  • C++ 中的序列化和反序列化
  • 我的Github学生认证申请过程
  • 信奥题解:勾股数计算中的浮点数精度问题
  • 重生之我在学Vue--第2天 Vue 3 Composition API 与响应式系统
  • 【AI知识】逻辑回归介绍+ 做二分类任务的实例(代码可视化)
  • Mysql 笔记2 emp dept HRs
  • MySQL和Oracle的区别
  • 实验12 C语言连接和操作MySQL数据库
  • 09篇--图片的水印添加(掩膜的运用)
  • sql-labs(21-25)
  • CTF知识集-命令执行
  • 基于米尔全志T527开发板的OpenCV进行手势识别方案
  • Htpp中web通讯发送post(上传文件)、get请求
  • 【论文阅读笔记】HunyuanVideo: A Systematic Framework For Large Video Generative Models
  • SpringBoot的事务钩子函数
  • 源码安装PHP-7.2.19
  • UE5制作伤害浮动数字
  • 学习日志024--opencv中处理轮廓的函数
  • (2024年最新)Linux(Ubuntu) 中配置静态IP(包含解决每次重启后配置文件失效问题)
  • DPDK用户态协议栈-TCP Posix API 2
  • [IT项目管理]项目时间管理(本章节3w字爆肝)
  • 【python因果库实战5】使用银行营销数据集研究营销决策的效果5