爬虫基础学习

发布于:2024-12-19 ⋅ 阅读:(11) ⋅ 点赞:(0)
  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_source

soup = 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)来绕过验证码。