Как очистить элемент с другим местоположением на странице - PullRequest
0 голосов
/ 20 июня 2019

Я очищаю элемент, который находится в разных позициях на странице.Мой текущий код несколько работает, но случайно не вернет значение.Когда я устанавливаю продавца = Нет, он создает другие экземпляры значения Нет, когда это должно быть имя продавца.

Моя цель - очистить сотни страниц для одного элемента на основе уникальных местоположений (и продолжать добавлять новые местоположения элемента), и, если элемент не находится на странице, иметь элемент, равный None.

Я пытался использовать операторы if, else и недавно получил несколько работающий код (спасибо stackoverflow), используя try / кроме первой попытки, чтобы посмотреть, находится ли элемент в определенной области и, если нет, перейти кдругой.Опять же, это не на 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)

При использовании моего кода я получу имя продавца, а если его нет, он не вернет ни одного, но установит для других возвращенных значений значение «нет», когда присутствует фактическое имя продавца.Если код будет запущен снова, он может не вернуть имя продавца, как раньше.Пример: прогон 1, страница 1: имя продавца = foo.Прогон 2, страница 1: имя продавца = нет.Я ожидаю, что код будет выполнять поиск в указанных местах и ​​возвращать текст, а если не в указанных местах, продавец = нет и будет продолжаться на всех страницах.А также сможете добавлять новые локации по мере их обнаружения.Спасибо!

1 Ответ

0 голосов
/ 21 июня 2019

Я решил это, определив элемент перед циклом, а затем используя '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)
...