Извлечь строку, соответствующую условию, из URL, который может измениться - PullRequest
0 голосов
/ 05 марта 2019

Я перебираю список веб-ссылок и очищаю основной 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)

1 Ответ

0 голосов
/ 05 марта 2019

Вы можете использовать простое регулярное выражение

B\w{9}

См. демонстрацию на regex101.com .

...