【发布时间】:2019-07-09 21:07:25
【问题描述】:
我正在尝试从亚马逊产品页面上的特定表格元素中抓取特定文本。
URL_1 包含所有元素 - https://www.amazon.com/dp/B008Q5LXIE/ URL_2 只有“销售排名” - https://www.amazon.com/dp/B001V9X26S
网址_1: “产品详细信息”表有 9 个项目,我只对“产品尺寸”、“运输重量”、项目型号和所有“卖家排名”感兴趣
我无法解析这些项目上的文本,因为有些项目位于一个代码块中,而其他项目则没有。
我正在使用 beautifulsoup,我在桌子上运行了 text.strip() 并得到了一切,但非常混乱。我已经尝试过 soup.find('li') 和 text.strip() 来查找单个元素,但是对于卖家排名,它返回的所有 3 个排名在一次返回中混杂在一起。我也尝试过正则表达式来清理文本,但它不适用于 4 个不同的卖家等级。我已经成功使用 Try, except, Pass 方法进行抓取,并且每个格式都采用该格式
A bad example of the code used, I was trying to get sales rank past the </b>
element in the HTML
#Sales Rank
sales_rank ='NOT'
try:
sr = soup.find('li', attrs={'id':'SalesRank'})
sales_rank = sr.find('/b').text.strip()
except:
pass
我希望能够将列出的元素抓取到字典中。我希望看到结果为
dimensions = 6x4x4
weight = 4.8 ounces
Item_No = IT-DER0-IQDU
R1_NO = 2,036
R1_CAT = Health & Household
R2_NO = 5
R2_CAT = Joint & Muscle Pain Relief Medications
R3_NO = 3
R3_CAT = Naproxen Sodium
R4_NO = 6
R4_CAT = Migraine Relief
my_dict = {'dimensions':'dimensions','weight':'weight','Item_No':'Item_No', 'R1_NO':R1_NO,'R1_CAT':'R1_CAT','R2_NO':R2_NO,'R2_CAT':'R2_CAT','R3_NO':R3_NO,'R3_CAT':'R3_CAT','R4_CAT':'R4_CAT'}
网址_2: 页面上唯一感兴趣的元素是“销售排名”。 “产品尺寸”、“装运重量”、产品型号不存在。但是,我想要一个类似于 URL_1 的返回值,但缺少的元素的值为“NA”。结果与 URL_1 相同,仅当元素不存在时给出“NA”。通过在 Try/Except 语句之前设置一个值,我已经成功地实现了这一点。例如: Shipping Weight = 'NA' ... 然后运行 try/except: pass ,所以我得到 'NA' 并且我的字典不为空。
【问题讨论】:
标签: python html web-scraping beautifulsoup