网站右侧二维码,营销微信管理,上海微盟企业发展有限公司,成都最好的编程培训机构爬虫概念与工作原理 爬虫是什么#xff1a;爬虫#xff08;Web Scraping#xff09;是自动化地访问网站并提取数据的技术。它模拟用户浏览器的行为#xff0c;通过HTTP请求访问网页#xff0c;解析HTML文档并提取有用信息。
爬虫的基本工作流程#xff1a;
发送HTTP请求…爬虫概念与工作原理 爬虫是什么爬虫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, headersheaders)# # 检查响应状态码
# if response.status_code 200:
# # 不直接打印全部响应内容而是打印前100个字符
# # print(响应内容预览, response.text[:100])
# # print(页面加载成功)
# # print(f状态码{response.status_code})# with open(response.txt, w, encodingutf-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_pathE:\\adfg\\chromedriver.exe)
# driver webdriver.Chrome(serviceservice)# 使用 webdriver_manager 自动安装匹配的 ChromeDriver
service Service(ChromeDriverManager().install())
driver webdriver.Chrome(serviceservice)# driver webdriver.Chrome(serviceService(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, encodingutf-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(stripTrue) # 获取文本并去除空白 get_text获取的标题有可能被截断
# print(product_title)for product_title in product_titles:# 尝试获取完整的title属性full_title product_title.get(title) or product_title.get_text(stripTrue)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来绕过验证码。