Я пытаюсь очистить общественную группу facebook с помощью beautifulsoup, я использую мобильный сайт для отсутствия javascript там. Таким образом, этот скрипт должен получить ссылку из ключевого слова "больше" и получить текст из тега 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())
Всегда полезно посмотреть, что делает ваш скрипт, быстрый способ сделать это - напечатать ваши результаты на определенных этапах на этом пути.
Например, используя ваш код:
for elem in browser.find_elements_by_link_text('More'):
print("elem 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
работает.
Что отлично работает на моей машине. Надеюсь, это поможет!