保存此脚本并使用 Visual Studio Code 中的 Python 运行它。您会注意到,代码启动 Chrome、导航到 Yelp、清除位置文本框、输入“斯德哥尔摩”、单击搜索按钮、过滤当前营业的商家,然后关闭页面。之后,抓取结果将保存到 Excel 文件中 stockholm_bussinsess.xlsx:随着数字经济的持续指数级增长 ,从API、网站和数据库等各种来源收集数据 比以往任何时候都更加重要。 先决条件 3.执行并测试生成的代码。 使用 ChatGPT 抓取静态 HTML 网站 现在您已经熟悉了一般的工作流程,让我们使用 ChatGPT 来抓取一些包含 静态 HTML 元素的网站。首先,您将从 https://books.toscrape.com抓取图书标题和价格。 首先,您需要确定包含所需数据的 HTML 元素: 接下来,您需要编写具体且详细的 ChatGPT 提示来生成抓取代码。为此,您需要告诉 ChatGPT 安装任何所需的 Python 包,引导它提取 HTML 选择器(您之前已确定),然后要求它将数据保存为 Excel 文件.
您可以在 ChatGPT 中输入类似这样的内容: 您是使用Python 的 Beautiful Soup库和任何必要的自动化工具进行网络抓取的专家 。我希望您生成一个详细的分步脚本来抓取 https://books.toscrape.com;请执行以下操作: 在响应中,ChatGPT 指示您运行以下命令来安装执行网页抓取的 Beautiful Soup 库和 将数据存储为 Excel 的综合数据分析库 <span style="color:#303b45"><span style="background-color:#ffffff"><span style="color:#71e5fe"><code class="language-none">pip3 install requests beautifulsoup4 pandas openpyxl</code></span></span></span> 您会注意到 ChatGPT 还建议安装 openpyxl,但这里不需要。 ChatGPT 还提供以下网页抓取代码: <span style="color:#303b45"><span style="background-color:#ffffff"><span style="color:#71e5fe"><code class="language-none">import requests from bs4 import BeautifulSoup import pandas as pd # URL of the website url = 'https://books.toscrape.com' # Send a GET request to the website response = requests.get(url) if response.status_code == 200: # Parse the HTML content of the page soup = BeautifulSoup(response.content, 'html.parser') # Initialize lists to store the titles and prices book_titles = [] book_prices = [] # Extract the first book title and price using the provided selectors book_title_selector = "#default > div.container-fluid.page > div > div > div > section > div:nth-child(2) > ol > li:nth-child(1) > article > h3 > a" book_price_selector = "#default > div.container-fluid.page > div > div > div > section > div:nth-child(2) > ol > li:nth-child(1) > article > div.product_price > p.price_color" title_element = soup.select_one(book_title_selector) price_element = soup.select_one(book_price_selector) if title_element and price_element: book_titles.append(title_element.get('title')) book_prices.append(price_element.text.strip()[1:]) # Extract all book titles and prices on the first page books = soup.select('section > div:nth-child(2) > ol > li') for book in books: title = book.select_one('h3 > a') price = book.select_one('div.product_price > p.price_color') if title and price: book_titles.append(title.get('title')) book_prices.append(price.text.strip()[1:]) # Create a DataFrame from the lists df = pd.DataFrame({ 'Title': book_titles, 'Price': book_prices }) # Save the DataFrame to an Excel file df.to_excel('books_scraped.xlsx', index=False) print('Data has been successfully scraped and saved to books_scraped.xlsx') else: print('Failed to retrieve the webpage')</code></span></span></span> 此代码导入了 requests 模块,该模块对其抓取的网站执行 HTTP 调用。它还导入了 pandas 包,用于将抓取的数据存储在 Excel 文件中。该代码定义了网站的基本 URL 以及它所针对的特定 HTML 选择器,以获取请求的数据。 然后,代码调用网站并将网站内容作为 BeautifulSoup 名为的对象 soup。代码使用 HTML 选择器从对象中选择书名和价格的值作为列表 soup 。最后,代码根据书名和价格表创建一个 pandas DataFrame 并将其保存为 Excel 文件。 接下来,您需要将代码保存到名为的文件中 ,然后 从命令行 books_scraping.py 运行该命令 。此代码 在与相同的目录中 生成一个名为的 Excel 文件:python3 books_scraping.pybooks_scraped.xlsxbooks_scraping.py 现在您已经了解了一个示例,让我们更进一步地了解本教程并抓取另一个简单的网站:https://quotes.toscrape.com,其中包含一系列引文。 再次,让我们首先确定步骤的顺序。 如果您使用的是 Chrome,请找到以下 HTML 选择器: body > div.container > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span.text 抓取 引文 body > div.container > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span:nth-child(2) > small 识别 作者 一旦确定了要抓取的 HTML 选择器,您就可以起草一个详细的提示(如下所示)来生成抓取代码: 您是使用 Python 的 Beautiful Soup 库和任何必要的自动化工具进行网络抓取的专家。我希望您能生成一个详细的分步脚本来抓取 https://quotes.toscrape.com。请执行以下操作: 1.安装任何必要的 Python 包。 <span style="color:#303b45"><span style="background-color:#ffffff"><span style="color:#71e5fe"><code class="language-none">pip3 install requests beautifulsoup4 pandas openpyxl</code></span></span></span> ChatGPT 还应提供以下网页抓取代码: <span style="color:#303b45"><span style="background-color:#ffffff"><span style="color:#71e5fe"><code class="language-none">import requests from bs4 import BeautifulSoup import pandas as pd # Step 1: Fetch the web page content url = "https://quotes.toscrape.com" response = requests.get(url) html_content = response.text # Step 2: Parse the HTML content using BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') # Step 3: Extract the specific quote and author quote_selector = "body > div.container > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span.text" author_selector = "body > div.container > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span:nth-child(2) > small" specific_quote = soup.select_one(quote_selector).get_text() specific_author = soup.select_one(author_selector).get_text() print(f"Specific Quote: {specific_quote}") print(f"Specific Author: {specific_author}") # Step 4: Extract all quotes and authors quotes = soup.find_all('div', class_='quote') all_quotes = [] for quote in quotes: text = quote.find('span', class_='text').get_text() author = quote.find('small', class_='author').get_text() all_quotes.append({"quote": text, "author": author}) # Step 5: Save the quotes to an Excel file df = pd.DataFrame(all_quotes) df.to_excel('quotes.xlsx', index=False) print("Quotes have been saved to quotes.xlsx") soup = BeautifulSoup(html_content, 'html.parser') # Step 3: Extract the specific quote and author quote_selector = "body > div.container > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span.text" author_selector = "body > div.container > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span:nth-child(2) > small" specific_quote = soup.select_one(quote_selector).get_text() specific_author = soup.select_one(author_selector).get_text() print(f"Specific Quote: {specific_quote}") print(f"Specific Author: {specific_author}") # Step 4: Extract all quotes and authors quotes = soup.find_all('div', class_='quote') all_quotes = [] for quote in quotes: text = quote.find('span', class_='text').get_text() author = quote.find('small', class_='author').get_text() all_quotes.append({"quote": text, "author": author}) # Step 5: Save the quotes to an Excel file df = pd.DataFrame(all_quotes) df.to_excel('quotes.xlsx', index=False) print("Quotes have been saved to quotes.xlsx")</code></span></span></span> 将此代码保存到名为 的文件中 ,然后 从命令行 quotes_scraping.py 运行该命令 。此代码 在与 相同的目录中 生成一个名为 的 Excel 文件。打开生成的 Excel 文件,它应如下所示:python3 books_scraping.pyquotes_scraped.xlsxquotes_scraping.py 爬取复杂网站抓取复杂网站可能具有挑战性,因为动态内容通常通过 JavaScript 加载,而 JavaScript 等工具 requests 无法 BeautifulSoup 处理这些内容。这些网站可能需要单击按钮或滚动鼠标等交互才能访问所有数据。为了应对这一挑战,您可以使用 WebDriver,它可以像浏览器一样呈现页面并模拟用户交互,确保所有内容都可以像普通用户一样访问。 例如, Yelp 是一个面向企业的众包评论网站。Yelp 依赖于动态页面生成,需要模拟多个用户交互。在这里,您将使用 ChatGPT 生成一个抓取代码,该代码可检索斯德哥尔摩的企业列表及其评分。 要抓取 Yelp,我们首先记录一下要遵循的步骤: 找到脚本将使用的位置文本框的选择器;在本例中为 #search_location。在位置搜索框中输入“斯德哥尔摩”,然后找到搜索按钮选择器;在本例中为 #header_find_form > div.y-css-1iy1dwt > button。点击搜索按钮查看搜索结果。这可能需要几秒钟。找到包含企业名称的选择器(即 #main-content > ul > li:nth-child(3) > div.container_\_09f24_\_FeTO6.hoverable_\_09f24_\__UXLO.y-css-way87j > div > div.y-css-cxcdjj > div:nth-child(1) > div.y-css-1iy1dwt > div:nth-child(1) > div > div > h3 > a): 查找包含该业务评级的选择器(即 #main-content > ul > li:nth-child(3) > div.container_\_09f24_\_FeTO6.hoverable_\_09f24_\__UXLO.y-css-way87j > div > div.y-css-cxcdjj > div:nth-child(1) > div.y-css-1iy1dwt > div:nth-child(2) > div > div > div > div.y-css-ohs7lg > span.y-css-jf9frv): 找到“立即打开”按钮的选择器 ;这里是 #main-content > div.stickyFilterOnSmallScreen_\_09f24_\_UWWJ3.hideFilterOnLargeScreen_\_09f24_\_ilqIP.y-css-9ze9ku > div > div > div > div > div > span > button:nth-child(3) > span: 保存网页的副本,以便稍后上传,同时保存 ChatGPT 提示,以帮助 ChatGPT 理解提示的上下文。在 Chrome 中,您可以通过单击右上角的三个点,然后单击 保存并共享 > 另存页面为来执行此操作: 接下来,使用之前提取的选择器值,你需要起草一个详细的提示来指导 ChatGPT 生成抓取脚本 您是网页抓取专家。我希望您抓取 https://www.yelp.com/ 以提取特定信息。抓取前请遵循以下步骤: 1.使用选择器清除该框 #search_location。 输入这些信息后,ChatGPT 会提示你安装支持 WebDriver 和 pandas 的 Web 自动化框架 Selenium: <span style="color:#303b45"><span style="background-color:#ffffff"><span style="color:#71e5fe"><code class="language-none">pip3 install selenium pandas</code></span></span></span> ChatGPT 还为您提供了一些抓取代码以及解释:保存此脚本并使用 Visual Studio Code 中的 Python 运行它。您会注意到,代码启动 Chrome、导航到 Yelp、清除位置文本框、输入“斯德哥尔摩”、单击搜索按钮、过滤当前营业的商家,然后关闭页面。之后,抓取结果将保存到 Excel 文件中 stockholm_bussinsess.xlsx: <span style="color:#303b45"><span style="background-color:#ffffff"><span style="color:#71e5fe"><code class="language-none">from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import pandas as pd import time # Initialize the WebDriver driver = webdriver.Chrome() try: # Open Yelp driver.get('https://www.yelp.com/') # Clear the location search box location_box = driver.find_element(By.CSS_SELECTOR, '#search_location') location_box.clear() # Enter "Stockholm" in the location search box location_box.send_keys('Stockholm') # Click the search button search_button = driver.find_element(By.CSS_SELECTOR, '#header_find_form > div.y-css-1iy1dwt > button') search_button.click() # Wait for search results to load WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, '#main-content')) ) # Click on "Open Now" filter open_now_button = driver.find_element(By.CSS_SELECTOR, '#main-content > div.stickyFilterOnSmallScreen__09f24__UWWJ3.hideFilterOnLargeScreen__09f24__ilqIP.y-css-9ze9ku > div > div > div > div > div > span > button:nth-child(3) > span') open_now_button.click() # Wait for the filter results to load time.sleep(5) # Extract business names and reviews business_names = [] business_reviews = [] businesses = driver.find_elements(By.CSS_SELECTOR, '#main-content > ul > li') for business in businesses: try: name = business.find_element(By.CSS_SELECTOR, 'div.container__09f24__FeTO6.hoverable__09f24___UXLO.y-css-way87j > div > div.y-css-cxcdjj > div:nth-child(1) > div.y-css-1iy1dwt > div:nth-child(1) > div > div > h3 > a').text review = business.find_element(By.CSS_SELECTOR, 'div.container__09f24__FeTO6.hoverable__09f24___UXLO.y-css-way87j > div > div.y-css-cxcdjj > div:nth-child(1) > div.y-css-1iy1dwt > div:nth-child(2) > div > div > div > div.y-css-ohs7lg > span.y-css-jf9frv').text business_names.append(name) business_reviews.append(review) except Exception as e: print(f"Error extracting data for a business: {e}") # Create a DataFrame and save to Excel df = pd.DataFrame({'Business Name': business_names, 'Reviews': business_reviews}) df.to_excel('stockholm_businesses.xlsx', index=False) print("Data saved to stockholm_businesses.xlsx") finally: # Close the WebDriver driver.quit()</code></span></span></span> 保存此脚本并使用 Visual Studio Code 中的 Python 运行它。您会注意到,代码启动 Chrome、导航到 Yelp、清除位置文本框、输入“斯德哥尔摩”、单击搜索按钮、过滤当前营业的商家,然后关闭页面。之后,抓取结果将保存到 Excel 文件中 stockholm_bussinsess.xlsx: 本教程的所有源代码均可在 GitHub上找到。 结论在本教程中,您学习了如何使用 ChatGPT 从具有静态 HTML 渲染的网站以及具有动态页面生成、外部 JavaScript 链接和用户交互的更复杂的网站中提取特定信息。 虽然抓取 Yelp 这样的网站很简单,但实际上,抓取复杂的 HTML 结构的网站可能很有挑战性,而且您可能会遇到 IP 禁令和 。 为了简化操作, Bright Data 提供各种数据收集服务,包括帮助绕过 IP 禁令的高级代理服务、用于绕过和解决 CAPTCHA 的 Web Unlocker、用于自动数据提取的Web Scraping API以及 用于高效数据提取的Scraping Browser 。 (责任编辑:) |