从可以更改的URL中提取符合条件的字符串

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

我循环浏览网页链接并抓取底层网址。有时提取的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)
python parsing url extract
1个回答
1
投票

您可以使用简单的正则表达式

B\w{9}

a demo on regex101.com

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.