Селена Питон Beautifulsoup застрял на текущей странице - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь очистить общедоступную группу в Facebook с помощью Beautifulsoup, я использую мобильный сайт из-за отсутствия там javascript. Таким образом, этот скрипт должен получить ссылку из ключевого слова «more» и получить там текст из тега p, но он просто получает текст из тега p текущей страницы. Может кто-нибудь указать мне проблему? Я новичок в Python и все в этом коде.

   from selenium import webdriver
   from selenium.webdriver.common.keys import Keys
   from selenium.common.exceptions import NoSuchElementException
   from bs4 import BeautifulSoup
   import requests
   browser = webdriver.Firefox()
   browser.get('https://mobile.facebook.com/groups/22012931789?refid=27')
   for elem in browser.find_elements_by_link_text('More'):
      page = requests.get(elem.get_attribute("href"))
      soup=BeautifulSoup(page.content,'html.parser')
      print(soup.find_all('p')[0].get_text()) 

1 Ответ

0 голосов
/ 24 августа 2018

Всегда полезно посмотреть, что на самом деле делает ваш скрипт, быстрый способ сделать это - распечатать результаты на определенных этапах.

Например, используя ваш код:

for elem in browser.find_elements_by_link_text('More'):
    print("elem's href attribute: {}".format(elem.get_attribute("href")))

Вы заметите, что первый пустой. Мы должны проверить это, прежде чем пытаться получить запросы на его получение:

for elem in browser.find_elements_by_link_text('More'):
    if elem.get_attribute("href"):
        print("Trying to get {}".format(elem.get_attribute("href")))
        page = requests.get(elem.get_attribute("href"))
        soup=BeautifulSoup(page.content,'html.parser')
        print(soup.find_all('p')[0].get_text())

Обратите внимание, что пустая elem.get_attribute("href") возвращает пустую строку Unicode, u'' - но питоны считают пустую строку ложной, поэтому этот if работает.

Который отлично работает на моей машине. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...