在这个越来越依赖数据的世界里,收集和分析大量信息的能力可以为企业和专业人士带来巨大的竞争优势。从网站中提取数据的过程--网络搜索,是数据分析师、网络开发人员、数字营销人员和 Python 程序员的有力工具。本指南将带您了解基本和高级网络抓取技术,重点介绍最佳实践,并介绍ProxyScrape 的 网络抓取 API,作为静态和动态网站的灵活解决方案。
确定网站是静态的还是动态的:
这些方法只是确定网站是静态还是动态的几种方法。虽然还有其他策略,但我们已经分析并确定了这些技术,我们认为这些技术被广泛使用且行之有效。
为了抓取静态内容,Python 提供了强大的库,如用于发出 HTTP 请求的 `requests` 库和用于解析 HTML 和 XML 文档的 `BeautifulSoup` 库。下面是一个简单的例子:
导入请求
从bs4导入BeautifulSoup
response = requests.get('http://example.com')
soup = BeautifulSoup(response.text,'html.parser')
# 提取所需的数据
data = soup.find_all('p')
这种方法非常适合刚刚开始网络搜刮之旅的人。它对静态内容的网站很有效,只需最少的设置。
动态网站面临着不同的挑战。这些网站使用 JavaScript 异步加载内容,这意味着直接的 HTML 搜刮无法工作,因为数据并不存在于初始页面加载中。
动态网站搜索有两种方法:
要抓取动态内容, Playwright等工具可以模拟真实用户与浏览器的交互,让您抓取动态加载的数据。下面简要介绍如何使用 Playwright 和 Python:
从 playwright.sync_api 导入 sync_playwright
如果 __name__ =='__main__':
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page= browser.new_page()
page.goto('https://www.scrapethissite.com/pages/ajax-javascript/')
# 在此模拟交互
page.click('//*[@id="2014"]')
# 提取动态内容
content =page.inner_text('//*[@id="oscars"]/div/div[5]/div/table')
print(content)
browser.close()
import requests
# URL from the AJAX request
url = 'https://example.com/api/data'
# Any headers you observed that are necessary, like user-agent, authorization tokens, etc.
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36,gzip(gfe)',
'Authorization': 'Bearer token_if_needed'
}
# If it's a POST request, you might also need to send data
data = {
'example_key': 'example_value'
}
# Replace 'get' with 'post' if the request type is POST
response = requests.get(url, headers=headers, data=data if 'post' in locals() else None)
# To view the response
print(response.json())
虽然掌握请求和 Playwright 或任何其他 Http 客户端库都会让人受益匪浅,但要正确处理它们却需要花费时间和精力。另一种方法是利用 Web Scraping API,它可以将复杂的刮擦任务抽象化。它不仅能为你处理 HTTP 请求的发送,还能提供反禁止技术的帮助,防止被某些网站屏蔽。
ProxyScrape提供的 网络抓取 API可简化静态和动态网站的数据提取。
应用程序接口的功能包括
这是一个示例,说明如何将我们的网络刮擦 API 集成到用于静态网站的 Python 脚本中,或用于调用从浏览器检查面板中提取的 API 端点:
import requests
import base64
import json
data = {
"url": "https://books.toscrape.com/",
"httpResponseBody": True
}
headers = {
'Content-Type': 'application/json',
'X-Api-Key': 'YOUR_API_KEY'
}
response = requests.post('https://api.proxyscrape.com/v3/accounts/freebies/scraperapi/request', headers=headers, json=data)
if response.status_code == 200:
json_response = response.json()
if 'browserHtml' in json_response['data']:
print(json_response['data']['browserHtml'])
else:
print(base64.b64decode(json_response['data']['httpResponseBody']).decode())
else:
print("Error:", response.status_code)
下面是一个等待 favicon 开始加载的示例。在我们使用的测试网站上,这通常是最后一个启动的请求。
import requests
import json
url = 'https://api.proxyscrape.com/v3/accounts/freebies/scraperapi/request'
headers = {
'Content-Type': 'application/json',
'X-Api-Key': '<your api key>' # Make sure to replace <your api key> with your actual API key
}
payload = {
"url": "https://books.toscrape.com/",
"browserHtml": True,
"actions": [
{
"action": "waitForRequest",
"urlPattern": "https://books.toscrape.com/static/oscar/favicon.ico",
"urlMatchingOptions": "exact"
}
]
}
response = requests.post(url, headers=headers, json=payload)
# Print the response from the server
print(response.text) # Prints the response body as text
无论您选择何种工具或 API,遵守网站使用条款、限制请求率以避免 IP 禁止以及使用代理进行匿名搜刮都是至关重要的最佳实践。 ProxyScrape我们不仅提供满足此类需求的高级、住宅、移动和专用代理,还鼓励合乎道德的网络搜刮。
准备好开始您的网络搜索之旅了吗?今天就 注册ProxyScrape,利用我们的专用代理、住宅代理和全面的 Web Scraping API 探索网络的无限可能。