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

时间:2019-06-20 17:17:29

标签: python web-scraping beautifulsoup element scrape

我正在按页面抓取位于不同位置的元素。我当前的代码在某种程度上可以正常工作,但不会随机返回该值。当我将卖方设置为None时,它将成为值None的其他实例,而该实例应为卖方名称。

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

我已经尝试过if语句或else语句,最近使用try /获得了一些有效的代码(感谢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)

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

1 个答案:

答案 0 :(得分:0)

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

 map(func, iterable[, chunksize])

    A parallel equivalent of the map() built-in function (it supports only one iterable argument though). It blocks until the result is ready.

    This method chops the iterable into a number of chunks which it submits to the process pool as separate tasks. The (approximate) size of these chunks can be specified by setting chunksize to a positive integer.