采集动态网页是困扰许多人的难题,不妨使用 Python 和 Selenium抓取网页数据。
微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩
你是否对从网站提取数据感兴趣,但发现自己被网络抓取的复杂性所困扰?不要害怕,我们在这篇文章中将展示如何利用 Selenium 和 Python 的强大功能使网络抓取变得轻而易举。
在深入之前,我们先简要定义网络抓取。Web抓取是从网站自动提取数据的过程。它可用于多种目的,例如从电子商务网站提取产品信息、收集研究数据或监控在线活动。通过网络抓取,可能性是无限的。
现在,让我们探讨一下我们将在这篇文章中涵盖的子主题:
从网页中提取数据
要从网页中提取数据,我们将使用 Selenium WebDriver for Python。WebDriver 是一个强大的工具,它能以编程方式控制网络浏览器。我们将使用它导航到网页、定位页面上的元素以及提取我们感兴趣的数据。
假设我们要从新闻网站中提取热门新闻文章的标题。我们可以使用 Selenium 来自动化导航到网站和提取标题的过程。这是一个示例代码片段,它就是这样做的:
from selenium import webdriver
# create a new Chrome browser instance
browser = webdriver.Chrome()
# navigate to the news website
browser.get('https://www.bbc.com/news')
# locate the top news articles
articles = browser.find_elements_by_class_name('gs-c-promo-heading__title')
# extract the titles of the top news articles
for article in articles:
print(article.text)
# close the browser window
browser.quit()
在本例中,我们使用webdriver.Chrome()方法创建一个新的 Chrome 浏览器实例。然后我们使用该browser.get()方法导航到新闻网站。进入页面后,我们使用该browser.find_elements_by_class_name()方法按类名定位热门新闻文章。最后,我们遍历文章并使用article.text属性提取它们的标题。
解析 HTML 和 XML 数据
我们从网页中提取的数据通常是 HTML 或 XML 格式。为了理解这些数据,我们需要使用像 BeautifulSoup 这样的库来解析它。BeautifulSoup 是一个 Python 库,它允许我们从 HTML 和 XML 文件中提取数据。
这是我们如何使用 BeautifulSoup 从 HTML 文件中提取数据的示例:
from bs4 import BeautifulSoup
# define the HTML file
html = '<html><body><h1>Hello, world!</h1></body></html>'
# parse the HTML file
soup = BeautifulSoup(html, 'html.parser')
# extract the text from the <h1> tag
text = soup.find('h1').get_text()
# print the extracted text
print(text)
在此示例中,我们将 HTML 文件定义为字符串并使用 BeautifulSoup 对其进行解析。然后我们使用该soup.find()方法定位标签并使用该get_text()方法提取其文本。
从动态网页中抓取数据
有时,网页使用在加载初始 HTML 后使用 JavaScript 加载的动态内容。这会使仅使用请求和 Beautiful Soup 来抓取数据变得困难。
在这些情况下,你可以使用像 Selenium 这样的无头浏览器来模拟用户与网页的交互并检索完全呈现的内容。下面是一个使用 Selenium 从动态加载的网页中抓取数据的示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
url = 'https://www.amazon.com/gp/bestsellers/electronics/'
driver = webdriver.Chrome()
driver.get(url)
wait = WebDriverWait(driver, 10)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'div.zg_itemImmersion')))
items = driver.find_elements_by_css_selector('div.zg_itemImmersion')
for item in items:
title = item.find_element_by_css_selector('div.p13n-sc-truncated').text.strip()
author = item.find_element_by_css_selector('a.a-size-small.a-link-child').text.strip()
print(f"{title} by {author}")
driver.quit()
“网页抓取就像用剪刀剪草坪。当然,它有效,但结果很混乱,你错过了很多。” — 马克·伊顿
在这篇文章中,我们介绍了使用 Selenium 和 Python 进行网络抓取的基础知识。我们已经学习了如何从网页中提取数据、解析 HTML 和 XML 数据,甚至从动态加载的网页中抓取数据。
推荐书单
《Python从入门到精通(第2版)》
《Python从入门到精通(第2版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Python进行程序开发应该掌握的各方面技术。全书共分23章,包括初识Python、Python语言基础、运算符与表达式、流程控制语句、列表和元组、字典和集合、字符串、Python中使用正则表达式、函数、面向对象程序设计、模块、异常处理及程序调试、文件及目录操作、操作数据库、GUI界面编程、Pygame游戏编程、网络爬虫开发、使用进程和线程、网络编程、Web编程、Flask框架、e起去旅行网站、AI图像识别工具等内容。所有知识都结合具体实例进行介绍,涉及的程序代码都给出了详细的注释,读者可轻松领会Python程序开发的精髓,快速提升开发技能。除此之外,该书还附配了243集高清教学微视频及PPT电子教案。
《Python从入门到精通(第2版)》【摘要 书评 试读】- 京东图书京东JD.COM图书频道为您提供《Python从入门到精通(第2版)》在线选购,本书作者:明日科技,出版社:清华大学出版社。买图书,到京东。网购图书,享受最低优惠折扣!https://item.jd.com/13284890.html
精彩回顾
ChatGPT教你如何用Python和Matplotlib绘图(上)
ChatGPT教你如何用Python和Matplotlib绘图(下)
《事半功倍,使用ChatGPT编写Python函数》
超快速,使用ChatGPT编写回归和分类算法
《如虎添翼,将ChatGPT和Python结合起来!》
《ChatGPT优化Python代码的小技巧》
《使用ChatGPT提升Python编程效率》
微信搜索关注《Python学研大本营》
访问【IT今日热榜】,发现每日技术热点
版权归原作者 Python学研大本营 所有, 如有侵权,请联系我们删除。