提问人:Dung8466 提问时间:9/24/2023 更新时间:9/24/2023 访问量:28
如果名称太长,Python Selenium 无法获取产品名称
Python Selenium can't get name of product if that name is too long
问:
我正在尝试从 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)
答:
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 source
class="script-render"
评论