【问题标题】:Extract string meeting a condition from a url that can change从可以更改的url中提取满足条件的字符串
【发布时间】:2019-03-05 03:43:29
【问题描述】:

我正在循环浏览一个网络链接列表并抓取一个底层 url 地址。有时提取的 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)

【问题讨论】:

  • zero[zero.find("=")+1:zero.find("&rh=")] 只是一个表达式。我想你想把它分配给zerozero = zero[zero.find("=")+1:zero.find("&rh=")]
  • 天哪。感谢您强调显而易见的事情。
  • 能否提供网址以防万一?

标签: python parsing url extract


【解决方案1】:

你可以使用一个简单的正则表达式

B\w{9}

a demo on regex101.com

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    相关资源
    最近更新 更多