如何按页面抓取不同位置的元素
How do I scrape an element with different location by page
我正在抓取一个位于页面不同位置的元素。我当前的代码有些工作,但 运行domly 不是 return 值。当我设置 seller = None 时,它会生成值 None 的其他实例,而它应该是卖家名称。
我的目标是根据唯一位置为单个元素抓取 100 多个页面(并继续添加元素的新位置),如果元素不在页面上,则元素等于 None。
我已经尝试过 for 语句、if / else 语句,并且最近使用 try / except 获得了一些工作代码(感谢 Whosebug)首先尝试查看元素是否在特定区域,如果不在,则移动到另一个.同样,这不是 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)
使用我的代码时,我将获取卖家名称,如果不存在,它将 return none,但将其他 returned 值设置为 'none'当存在实际卖家名称时。如果代码再次是运行,它可能不会像以前那样return卖家名称。例如:运行 1,第 1 页:卖家名称 = foo。 运行 2、第1页:卖家名称=None。我希望代码搜索指定的位置和 return 文本,如果不在指定的位置,则 seller = None 并继续浏览所有页面。并且还能够在发现新位置时添加新位置。谢谢!
我通过在循环之前定义元素然后在循环结束时使用 '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)
我正在抓取一个位于页面不同位置的元素。我当前的代码有些工作,但 运行domly 不是 return 值。当我设置 seller = None 时,它会生成值 None 的其他实例,而它应该是卖家名称。
我的目标是根据唯一位置为单个元素抓取 100 多个页面(并继续添加元素的新位置),如果元素不在页面上,则元素等于 None。
我已经尝试过 for 语句、if / else 语句,并且最近使用 try / except 获得了一些工作代码(感谢 Whosebug)首先尝试查看元素是否在特定区域,如果不在,则移动到另一个.同样,这不是 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)
使用我的代码时,我将获取卖家名称,如果不存在,它将 return none,但将其他 returned 值设置为 'none'当存在实际卖家名称时。如果代码再次是运行,它可能不会像以前那样return卖家名称。例如:运行 1,第 1 页:卖家名称 = foo。 运行 2、第1页:卖家名称=None。我希望代码搜索指定的位置和 return 文本,如果不在指定的位置,则 seller = None 并继续浏览所有页面。并且还能够在发现新位置时添加新位置。谢谢!
我通过在循环之前定义元素然后在循环结束时使用 '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)