我正在遍历一个Web链接列表并抓取一个底层的URL地址。有时提取的网址具有以下结构:
http://www.amazon.com/dp/B07DLTSZVP?tag=snag04-20
有时提取的URL如下所示:
https://www.amazon.com/s?field-asin=B01NCZM14C&rh=i%3Aaps%2Cssx%3Arelevance&field-keywords=best+minimalist+wallet
在每种情况下,我只希望每个URL中的10位字符串以大写字母“ B”开头(即“ B07DLTSZVP”或“ B01NCZM14C”)。
我在循环中包含了if,elif和else语句,以提取此特定字符串,具体取决于提取的url看起来像上面的第一种还是第二种情况(只会出现这两种情况),但这是不工作。我的代码仅提取整个URL,而不根据我的if语句进行解析。感谢您对解决方案的任何帮助。这是我的代码:
list = []
for index, row in filtereddf3.iterrows():
url = row[' href']
driver = webdriver.Firefox()
driver.get(url)
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
if soup.find('a', attrs={'id': 'view-amazon'}) is None:
zero = 1
elif '-asin=' in soup.find('a', attrs={'id': 'view-amazon'})['href']:
zero = soup.find('a', attrs={'id': 'view-amazon'})['href']
zero[zero.find("=")+1:zero.find("&rh=")]
else:
zero = soup.find('a', attrs={'id': 'view-amazon'})['href']
zero[zero.find("dp/")+3:zero.find("?tag")]
df = pd.DataFrame({'asin': zero}, index=[0])
time.sleep(3)
list.append(df)
final_list = pd.concat(list)