0

0

如何刮

王林

王林

发布时间:2024-08-15 19:50:03

|

468人浏览过

|

来源于dev.to

转载

抓取网络抓取 是一种用于以自动方式从网站提取数据的技术。它包括使用程序或脚本导航网页、提取特定信息(例如文本、图像、产品价格等)并保存。

在这篇文章中,我将教我用来做

抓取的过程以及做这件事时要记住的要点。

就我而言,我将在 pccomponentes 中执行

scraping 来收集有关笔记本电脑的信息。这些数据将用于创建一个数据集,作为机器学习模型的基础,旨在根据指定的组件预测笔记本电脑的价格。

首先,需要确定脚本应该访问哪个 url 来执行

抓取

如何刮

在这种情况下,如果我们查看 pccomponentes url,我们可以看到它通过 url 传递了一个参数,我们可以使用该参数来指定我们要搜索的内容。

完成后,我们将看到搜索结果:

如何刮

此后,我们将使用几乎所有浏览器都集成的开发者工具:

如何刮

右键单击,然后选择“检查”选项,开发者工具将打开,我们将看到以下内容:

如何刮

anchor类型的标签(),其中包含有关我们在搜索结果中看到的产品的大量信息。

如果我们查看以下区域,我们将看到几乎所有的产品数据:

如何刮

准备好了!我们有从中提取数据的区域。现在是时候创建脚本来提取它们了。

但是我们遇到了一个问题:如果你直接访问pccomponentes,它总是要求我们接受cookie策略。因此,我们无法发出 get 请求并

抓取结果,因为我们不会得到任何东西。

因此,我们必须使用selenium来模拟浏览器并能够与其交互。

我们首先执行以下操作:


from selenium import webdriver
from selenium.webdriver.firefox.options import options
from selenium.webdriver.support.ui import webdriverwait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import by

options = options()
options.headless = true
#abrimos el navegador
driver = webdriver.firefox(options=options)
time.sleep(5)
#vamos a la página indicada pccomponentes.com/laptops
driver.get(url+str(i))
#esperamos 30 segundos hasta que aparezca el botón de cookies y al aparecer hace clic
accept_cookies = webdriverwait(driver, 30).until(
    ec.presence_of_element_located((by.id, 'cookiesacceptall'))
)     
accept_cookies.click()
#descargamos el html
html = driver.page_source

完成后,在 html 变量中我们将获取页面的 html 代码来

scrape.

然而,我们遇到了另一个问题。当使用 selenium 打开浏览器并发出 2 或 3 个请求时,cloudflare 会限制请求并且不允许我们发出更多请求。因此,我们只能

抓取大约 3 个页面,这将是大约 20 台不同的计算机。不足以制作数据集。

我想到的一个解决方案是在本地下载页面并在本地使用 html。完成

抓取后,我们可以打开另一个浏览器(等待合理的时间)并下载以下浏览器。

所以我将上面的代码添加到一个函数中,并将其包装在

for 中,如下所示:

#función que se conecta a pccomponentes y guarda el html en local 
def guarda_datos_html(i=0):
    try:
        options = options()
        options.headless = true
        #abrimos el navegador
        driver = webdriver.firefox(options=options)

        time.sleep(5)
        #vamos a la página indicada pccomponentes.com/laptops
        driver.get(url+str(i))
        #esperamos 30 segundos hasta que aparezca el botón de cookies y al aparecer hace clic
        accept_cookies = webdriverwait(driver, 30).until(
            ec.presence_of_element_located((by.id, 'cookiesacceptall'))
        )

        accept_cookies.click()
        #descargamos el html
        html = driver.page_source
        #lo guardamos en local
        with open(f'html/laptops_{i}.html','w',encoding="utf-8") as document:
            document.write(html)

        driver.close()
    except:
        print(f'error en página: {i}')

for i in range(0,58):
    guarda_datos_html(i)
    time.sleep(30)

现在我们可以恢复 html 并使用它们。为此,我安装了

beautifulsoup,这是一个在scraping中经常使用的包。

由于之前的功能,我们将开发从我们下载的 html 中收集信息的功能。

函数看起来像这样:


# Función que abre el HTML guardado con anterioridad y filtra los datos
# para guardarlos en un CSV ordenados
def get_datos_html(i=0):
    try:
        with open(f'laptop_data_actual.csv','a') as ldata:

            field = ['Company','Inches','Cpu','Ram','Gpu','OpSys','SSD','Price']
            writer = csv.DictWriter(ldata, fieldnames=field)


            with open(f'html/laptops_{i}.html','r',encoding="utf-8") as document:

                html = BeautifulSoup(document.read(), 'html.parser')
                products = html.find_all('a')

                for element in products:
                    pc = element.get('data-product-name')
                    if pc:
                        pc = pc.lower()
                        marca = element.get('data-product-brand')
                        price = element.get('data-product-price')
                        pc_data = pc.split('/')
                        cpu = pc_data[0].split(' ')

                        cpu = buscar_cpu(cpu)
                        gpu = buscar_gpu(pc_data)
                        inches = '.'.join([s for s in re.findall(r'\b\d+\b', pc_data[-1])])
                        OpSys = bucar_opsys(pc_data, marca)

                        row = {
                            'Company': marca,
                            'Inches': inches,
                            'Cpu': cpu,
                            'Ram': pc_data[1],
                            'Gpu': gpu,
                            'OpSys': OpSys,
                            'SSD': pc_data[2],
                            'Price': price
                        }

                        writer.writerow(row)
    except:
        print(f'Error en página: {i}')

基本上,我们打开 csv 文件,在其中保存信息,然后告诉 csv 我们希望它具有哪些字段,然后读取并使用 html。正如您所看到的,我必须执行一些额外的函数才能从我们想要保存在 csv 中的每个字段中提取必要的信息。

我在这里给你留下了完整的脚本,以防你想尝试一下!

pc组件刮板

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6430

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

348

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

415

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

95

2025.08.19

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

31

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

20

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

28

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

4

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号