如果名称太长,Python Selenium 无法获取产品名称

Python Selenium can't get name of product if that name is too long

提问人:Dung8466 提问时间:9/24/2023 更新时间:9/24/2023 访问量:28

问:

我正在尝试从 https://www.nguyenkim.com/tim-kiem.html?tu-khoa=may+tinh 中抓取所有产品(名称、图像、价格和链接),但如果产品名称太长,例如“Máy tính để bàn HP 205 Pro G4 AIO R5-4500U/8GB/256GB/Win10 31Y21PA” - 产品卡无法显示其全部内容,导致名称和价格变为空字符串,但图像,链接返回正确的值。

如果一切正常,则返回值:

Item(
    link = 'https://www.nguyenkim.com/chuot-logitech-m100r.html',
    name = 'Chuột máy tính Logitech M100R Đen',
    current_price = '109.000đ',
    place = 'Nguyen Kim',
    img = 'https://cdn.nguyenkimmall.com/images/thumbnails/210/210/detailed/177/10026584-chuot-logitech-m100r-den-1.jpg'
)

如果名称太长,则返回值:

Item(
    link = 'https://www.nguyenkim.com/may-tinh-bang-xiaomi-redmi-pad-64gb-xam.html',
    name = '',
    current_price = '',
    place = 'Nguyen Kim',
    img = 'https://cdn.nguyenkimmall.com/images/thumbnails/210/210/detailed/847/10053972-may-tinh-bang-xiaomi-redmi-pad-64gb-xam.jpg'
)

我尝试过什么:

    content = driver.find_element(By.CLASS_NAME, 'result-wrapper')
    items = content.find_elements(By.CLASS_NAME, 'product')
    for _ in items:
        item = Item(
          link = _.find_element(By.CSS_SELECTOR, "div[class*='product-header']").get_attribute('href'),
          name = _.find_element(By.CSS_SELECTOR, "div.product-title a").text,
          current_price = _.find_element(By.CSS_SELECTOR, "p[class*='final-price']").text,
          place = "Nguyen Kim",
          img = _.find_element(By.CSS_SELECTOR, "img").get_attribute('src')
        )
        print(item)

python html 字符串 selenium-webdriver css-selectors

评论


答:

1赞 Barry the Platipus 9/24/2023 #1

您可以在下面找到一种获取这些完整项目名称的直接方法。为此,您不需要 Selenium 的开销:

import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
import json

pd.set_option('display.max_columns', None)
pd.set_option('display.max_colwidth', None)

headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.79 Safari/537.36'
}

s = requests.Session()
s.headers.update(headers)

big_list = []
for i in range(1,3):
    r = s.get(f'https://www.nguyenkim.com/tim-kiem.html?tu-khoa=may+tinh&trang={i}')
    soup = bs(r.text, 'lxml')
    all_prods = soup.select('script[class="script-render"]')
    for prod in all_prods:
        prod_data = json.loads(prod.string.split('dataRenderProduct.push(')[1].split(');')[0])
        big_list.append(prod_data)
df = pd.json_normalize(big_list)
print(df)

终端结果:

    id  product_code    has_shock_price     has_flash_sale  image_url   big_image_url   link    origin_price    final_price     origin_price_int    list_price  final_price_int     price   product     display_name    name    nk_shortname    discount_percent    discount_percent_num    saved   is_installment  installment_bank    is_bestseller   short_desc  hidden_option   tags    tag_image_special   tag_overlay_special     tag_start_time_special  tag_end_time_special    tag_position_special    promotion_text  product_id  category_ids    percent_discount    coupon_text     cf_is_tra_gop   thumb
0   124425  000000000010053665-CAI      False   https://cdn.nguyenkimmall.com/images/thumbnails/210/210/detailed/836/10053665-may-tinh-de-ban-hp-205-pro-g4-aio-r5-4500u-31y21pa-1.jpg  https://cdn.nguyenkimmall.com/images/thumbnails/500/500/detailed/836/10053665-may-tinh-de-ban-hp-205-pro-g4-aio-r5-4500u-31y21pa-1.jpg  https://www.nguyenkim.com/may-tinh-de-ban-hp-205-pro-g4-aio-31y21pa.html    16.590.000đ     11.990.000đ     16590000    16590000    11990000    11990000    Máy tính để bàn HP 205 Pro G4 AIO R5-4500U/8GB/256GB/Win10 31Y21PA  Máy tính để bàn HP 205 Pro G4 AIO R5-4500U/8GB/256GB/Win10 31Y21PA  Máy tính để bàn HP 205 Pro G4 AIO R5-4500U/8GB/256GB/Win10 31Y21PA      -28%    -28%    4.600.000đ  True    None    False   <p>Thiết kế tinh tế, kiểu dáng hiện đại với chân đế chữ X chắc chắn</p>\r\n<p>Tích hợp đủ hệ thống phần mềm, camera,... mà không cần CPU</p>\r\n<p>Bộ vi xử lý R5-4500U cho hiệu năng mạnh mẽ, xử lý tốt mọi tác vụ</p>\r\n<p>RAM 8GB đa nhiệm có thể mở 4-5 ứng dụng mà không bị giật, lag</p>\r\n<p>Ổ cứng 256GB mang đến không gian lưu trữ vừa đủ, mở máy nhanh</p>\r\n<p>Màn hình Full HD có kích thước 23.8inch hiển thị hình ảnh sắc nét</p>\r\n<p>Máy được trang bị Webcam 5MP nâng cao chất lượng cuộc đàm thoại</p>   N   None        None    1666803600  1666889999  None        124425  [341, 529, 554]     28      False   []
1   105706  000000000010049553-BO       False   https://cdn.nguyenkimmall.com/images/thumbnails/210/210/detailed/734/may-tinh-bang-samsung-galaxy-tab-a7-lite-32gb-bac.jpg  https://cdn.nguyenkimmall.com/images/thumbnails/500/500/detailed/734/may-tinh-bang-samsung-galaxy-tab-a7-lite-32gb-bac.jpg  https://www.nguyenkim.com/may-tinh-bang-samsung-galaxy-tab-a7-lite-32gb-bac.html    4.490.000đ  3.290.000đ  4490000     4490000     3290000     3290000     Máy tính bảng Samsung Galaxy Tab A7 Lite 32GB Bạc   Máy tính bảng Samsung Galaxy Tab A7 Lite 32GB Bạc   Máy tính bảng Samsung Galaxy Tab A7 Lite 32GB Bạc       -27%    -27%    1.200.000đ  True    None    False   <p>Màn hình 8.7 inch WXGA+ (1340x800) hiển thị hình ảnh rõ nét, chân thực</p>\r\n<p>CPU Mediatek MT8768T cho hiệu năng ổn định, xử lý tác vụ nhanh chóng</p>\r\n<p>Dung lượng pin 5100 mAh, sạc nhanh 15W, thoải mái trải nghiệm cả ngày</p>\r\n<p>Trải nghiệm âm thanh sống động với Hệ thống loa kép và Dolby Atmos </p>  N   None        None    1622048400  1622134799  None        105706  [340, 528, 549]     27      False   []
2   90168   000000000010042749-CHI      False   https://cdn.nguyenkimmall.com/images/thumbnails/210/210/detailed/618/10042749_MHMT_ACER_R241Y-23-8INCH_UM-QR1SS-B01_01.jpg  https://cdn.nguyenkimmall.com/images/thumbnails/500/500/detailed/618/10042749_MHMT_ACER_R241Y-23-8INCH_UM-QR1SS-B01_01.jpg  https://www.nguyenkim.com/man-hinh-may-tinh-acer-r241y.html     4.090.000đ  4.090.000đ  4090000     4090000     4090000     4090000     Màn hình máy tính Acer R241Y    MÀN HÌNH MÁY TÍNH ACER R241Y 23.8"  MÀN HÌNH MÁY TÍNH ACER R241Y 23.8"      None        None    True    None    False   <p>Màn hình LED 23.8 inch, hiển thị rõ nét</p>\r\n<p>Thời gian phản hồi màn hình cực nhạy 1 ms</p>\r\n<p>Độ phân giải Full HD, mang đến hình ảnh sống động</p>\r\n<p>Thiết kế viền siêu mỏng cho trải nghiệm hình ảnh độc đáo</p>\r\n<p>Khả năng tái chế, giảm chất thải, tiết kiệm năng lượng</p>\r\n<p>Có thể điều chỉnh độ nghiêng của màn hình dễ dàng </p>    N   None        None    1572454800  1572541199  None        90168   [341, 530, 559]     0       False   []
[...]

BeautifulSoup 文档可以在这里找到,请求文档可以在这里找到。 编辑:改进了代码,以引入完整的产品详细信息。

评论

0赞 Dung8466 9/24/2023
哇。非常感谢你。BeautifulSoup4 解决方案比 Selenium One 简单得多。但是阅读文档后,我仍然不知道在哪里可以找到script[class=“script-render”]。你能帮我吗?
0赞 Barry the Platipus 9/24/2023
那是在页面 HTML 中。只需检查页面,您就会看到元素。
0赞 Dung8466 9/24/2023
很抱歉继续询问,但我只能在网络选项卡中找到脚本,但在任何地方都找不到它的类。有没有技巧/提示可以找到它
0赞 Barry the Platipus 9/24/2023
右键单击页面,选择 。加载后,编写 Ctrl+F 并搜索 .View page sourceclass="script-render"