写在前面
在这个信息爆炸的时代,网络数据已成为企业决策、市场分析、产品研发等不可或缺的资源。然而,随着网站安全日益完善,数据获取变得越来越困难。同时,随着人工智能浪潮的来临,我们难免需要采集大量的各领域数据来微调完善我们自己的人工智能助手,这也让高效的数据采集工具成为刚需。
一、实践小案例
动态住宅代理,顾名思义,就是使用真实的住宅IP地址进行代理,且IP地址会动态变化。它的优势在于:
- 真实性:使用真实的住宅IP,更难被网站识别为网页抓取。
- 匿名性:隐藏你的真实IP,保护你的隐私和安全。
- 绕过限制:轻松绕过地域限制、访问频率限制等,获取更多数据。
举个实际的例子,比如最近我想要训练一个专门服务于中医领域的中医知识问答小助手,那么我需要解决的一个问题就是采集中医领域的相关问答数据,以此来喂给大模型让它进行微调训练,从而满足我们的需求。但是我们又害怕获取数据的时候自己电脑的IP地址被对方捕获,或者是由于频繁的访问而被限制,从而导致我们不能获取足够的数据。
在实际操作中,我就以某平台的动态住宅代理使用流程来讲: 首先点击左侧的Proxies & Scraping,由于我们需要借助代理抓取浏览器内的数据,所以点击抓取浏览器开始使用。
然后直接点击添加并确定:
刚进来会有一个提示,我们直接按回车键或者点击右下角的continue即可:
然后就可以看到操作平台,选择Code Examples,由于我平时使用python比较多,所以在此选择python的selenium方法进行浏览器数据获取。
我们可以看到左边有各种案例选择,有获取网页的HTML内容,点击网页元素等等,这里我们直接选择Getting started,自己获取网页内容进行分析即可。
我们可以看到其实你创建好网页抓取的代理以后,官方的示例代码已经自动填充了用户名、密码、主机以及端口号信息,真的非常方便,不需要我们自己去寻找和复制粘贴,官网的示例代码如下(此处已经把我的信息省略)。
python
from selenium.webdriver import Remote, ChromeOptions
from selenium.webdriver.chromium.remote_connection import ChromiumRemoteConnection
from HYPERLINK https://selenium.webdriver.common.by normalLink \tdfe -10 \tdlt text \tdlf FromInput \tdsub normalLink \tdkey ow74ytselenium.webdriver.common.by import By
AUTH = '用户名:密码'
SBR_WEBDRIVER = f'https://{AUTH}@主机:端口号'
def main():
print('Connecting to Scraping Browser...')
sbr_connection = ChromiumRemoteConnection(SBR_WEBDRIVER, 'goog', 'chrome')
with Remote(sbr_connection, options=ChromeOptions()) as driver:
print('Connected! Navigating...')
driver.get('https://example.com')
print('Taking page screenshot to file page.png')
driver.get_screenshot_as_file('./page.png')
print('Navigated! Scraping page content...')
html = driver.page_source
print(html)
if __name__ == '__main__':
main()
如果你的没有填充信息,可以到概览里面寻找,信息一目了然。
接下来我们直接按照官方的指引下载好 selenium 自动化库以后,使用官方示例代码进行一下测试,结果如下:
可以看到成功获得了"example.com"示例网址HTML的内容,而且响应的速度非常快,只有0.7s不到的相应时间,可谓丝滑至极~
接下来我们开始获取训练中医知识问答大模型所需要的数据集,这次我选择的是国外的 hangingface 社区,该社区是知名的自然语言处理模型库和社区,里面有大量的大模型训练所需的数据集。由于该网站是国外的网站,国内用户无法直接访问,所以我们直接借助该平台的代理进行数据获取。
首先我们需要先下载所需的库,命令如下:
python
pip install selenium beautifulsoup4
然后使用官方给的示例代码,替换目标网址部分,先获取AI数据集网址对应的HTML内容,代码如下:
python
from selenium.webdriver import Remote, ChromeOptions
from selenium.webdriver.chroHYPERLINK [email protected]:9515' normalLink \tdfe -10 \tdlt text \tdlf FromInput \tdsub normalLink \tdkey s8r7vn[email protected]:9515'umRemoteConnection
SBR_WEBDRIVER = 'https://brd-customer-hl_cfc106a7-zone-scraping_browser1:HYPERLINK [email protected]:9515' normalLink \tdfe -10 \tdlt text \tdlf FromInput \tdsub normalLink \tdkey wggd8m[email protected]:9515'
def main():
print('Connecting to Scraping Browser...')
sbr_connection = ChromiumRemoteConnection(SBR_WEBDRIVER, 'goog', 'chrome')
with Remote(sbr_connection, options=ChromeOptions()) as driver:
print('Connected! Navigating to ...')
driver.get('https://huggingface.co/datasets/SylvanL/Traditional-Chinese-Medicine-Dataset-SFT')
print('Navigated! ScrapiHYPERLINK https://selenium.webdriver.common.by normalLink \tdfe -10 \tdlt text \tdlf FromInput \tdsub normalLink \tdkey gzb0bmselenium.webdriver.common.by
html = driver.page_source
print(html)
if __name__ == '__main__':
main()
最后分析网页的HTML结构,获取我们想要的数据信息并保存为json文件,这一步建议可以直接交给chatgpt大模型来帮我们实现,最终代码实现如下:
python
from selenium.webdriver import Remote, ChromeOptions
from selenium.webdriver.chromium.remote_connection import ChromiumRemoteConnection
from selenium.webdriver.common.by import By
AUTH = '用户名:密码'
SBR_WEBDRIVER = f'https://{AUTH}@主机:端口号'
from bs4 import BeautifulSoup
import json
def main():
print('Connecting to Scraping Browser...')
sbr_connection = ChromiumRemoteConnection(SBR_WEBDRIVER, 'goog', 'chrome')
with Remote(sbr_connection, options=ChromeOptions()) as driver:
print('Connected! Navigating...')
driver.get('https://huggingface.co/datasets/SylvanL/Traditional-Chinese-Medicine-Dataset-SFT/viewer/default/train?p=0')
print('Taking page screenshot to file page.png')
driver.get_screenshot_as_file('./page.png')
print('Navigated! Scraping page content...')
html = driver.page_source
# 创建 BeautifulSoup 对象
soup = BeautifulSoup(html, 'html.parser')
# 找到所有包含问答内容的 tr 元素
rows = soup.find_all('tr', attrs={'data-row-idx': True})
# 存储问答内容的列表
data = []
# 遍历每一行
for row in rows:
# 找到所有的 td 元素
cells = row.find_all('td')
if len(cells) >= 2:
# 提取问题和答案
question = cells[1].get_text(strip=True)
answer = cells[2].get_text(strip=True)
# 将问题和答案添加到列表中
data.append({
'question': question,
'answer': answer
})
# 保存到 JSON 文件
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
print("问答内容已保存到 data.json 文件中。")
if __name__ == '__main__':
main()
获取到的数据如下图所示,刚好符合大模型训练微调的数据格式要求,这样我们就可以直接拿来进行微调大模型了。
二、网页API实践小案例
网页爬取API,是一种提供自动化网页抓取服务的接口,不仅支持专用的端点,而且还可以从120多个热门域名提取最新、结构化的网页数据,同时不用担心违规。
它的优势如下:
- 获取 JSON 或 CSV 格式的结构化数据
- 批量处理请求,单次最多可处理 5,000 个 URL
- 无限制的并发抓取任务
对于我来说最为方便的一点就是,它有现成的各大流行平台数据的自动抓取,比如说我最近想做一个对于海外tiktok用户评论的情感分析系统,那么我要采集tiktok的用户数据,通过该平台就可以简单的实现此操作。
下面我将演示下如何使用网页抓取API来实现tiktok用户数据的获取,首先点击tiktok,然后我们可以看到下面有tiktok各种信息获取的抓取器:
可以看到,tiktok的数据抓取器不仅能够通过URL收集帖子数据,而且还可以按照产品URL获取tiktok商店的产品信息。
这里我选择通过URL收集帖子数据,然后选择无代码抓取器服务:
点击下一个,进来以后发现这里已经帮我们添加好了几个tiktok地址,我们也可以自己添加想要获取的视频地址。
而点击词典我们查看这次爬取能够获取的信息有哪些,可以看到十分详细:
当一切都设置完毕以后,我们就可以点击 Start collecting ,正式开始自动数据获取。
这时候我们再返回,可以看到该抓取器已经在自动运行状态中,等它运行结束以后,我们重新进来以后点击日志,就可以看到下载按钮。
点击下载,选择我们想要保存的格式,这里我选择JSON格式,打开以后数据如下:
可以看到由于我只加入了两条视频的地址,所以抓取的数据量很少,如果大家想要抓取更多的数据,记得一定要将自己想要抓取的目标地址添加一下。
写在最后:
以上就是我们本次亮数据产品的两大特色功能介绍,感兴趣的伙伴们可以根据我的实践快速上手操作一番。
1.住宅代理全部套餐5折!错过等一年!所有新老客户均可使用,点击 注册或登录,即可直接享受折扣。 (链接随后提供) 2.网页抓取API,全线75折!有效期6个月!所有新老客户均可使用,点 击注册或登录,即可直接享受折扣。(链接见评论区置顶链接)