如何按页抓取不同位置的元素

问题描述 投票:0回答:1

我正在抓取位于页面不同位置的元素。我当前的代码有些工作,但会随机不返回该值。当我设置 seller = None 时,它会生成值 None 的其他实例,而它应该是卖家名称。

我的目标是根据唯一位置抓取 100 个页面的单个元素(并继续添加元素的新位置),如果元素不在页面上,则让元素等于 None。

我尝试过 for 语句、if / else 语句,最近使用 try / except 得到了一些工作代码(感谢 stackoverflow),首先尝试查看元素是否在特定区域,如果不在,则移动到另一个区域。再次强调,这并不是 100% 有效。

soup = BeautifulSoup(r.text, 'lxml')
if url == product_url:
  try:
    loc1 = soup.find('div', attrs={'id':'availability-brief', 'class':'a- 
    section a-spacing-none'})

    seller = loc1.find('a', href=re.compile('dp_merchant'), attrs= 
    {'id':'sellerProfileTriggerId'}).text.strip()

  except:
     try:
       loc2 = soup.find('div', attrs={'id':'sns-availability', 'class':'a- 
       section a-spacing-none'})

       seller = loc2.find('span', text = re.compile('text'), attrs= 
       {'class':'a-size-base'}).text.strip()

     except:
       seller = None

  print(seller)
  prod_dict = {'seller':seller}
  print(url)
  print(prod_dict)

使用我的代码时,我将获取卖家名称,如果不存在,它将返回无,但当实际卖家名称存在时,将其他返回值设置为“无”。如果再次运行代码,它可能不会像以前那样返回卖家名称。例如:运行 1 ,第 1 页:卖家名称 = foo.运行 2,第 1 页:卖家名称 = 无。 我希望代码搜索指定的位置并返回文本,如果不在指定的位置,则 seller = None 并继续浏览所有页面。并且还能够在发现新位置时添加它们。谢谢!

python web-scraping beautifulsoup element
1个回答
0
投票

我通过在循环之前定义元素,然后在循环末尾使用“pass”来解决这个问题。

 soup = BeautifulSoup(r.text, 'lxml')
 if url == product_url:
 seller = 'NA'   
   try:
     loc1 = soup.find('div', attrs={'id':'availability-brief', 'class':'a- 
     section a-spacing-none'})

     seller = loc1.find('a', href=re.compile('dp_merchant'), attrs= 
     {'id':'sellerProfileTriggerId'}).text.strip()

   except:
     try:
       loc2 = soup.find('div', attrs={'id':'sns-availability', 'class':'a- 
       section a-spacing-none'})

       seller = loc2.find('span', text = re.compile('text'), attrs= 
       {'class':'a-size-base'}).text.strip()

     except:
       pass

   print(seller)
   prod_dict = {'seller':seller}
   print(url)
   print(prod_dict)
© www.soinside.com 2019 - 2024. All rights reserved.