import requests
from bs4 import BeautifulSoup

url = "https://twitter.com/realDonaldTrump?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor"

r = requests.get(url)

soup = BeautifulSoup(r.content, "html.parser")

links = soup.find_all("a")

g_data = soup.find_all("div", {"class": "content"})  

n_data = soup.find_all("strong", {"class": "fullname show-popup-with-id "})

c_data = soup.find_all("p", {"class": "TweetTextSize TweetTextSize--normal js-tweet-text tweet-text"})

for item in g_data:

    try:

        print(item.contents[0].find_all(n_data)[0].text)

    except:

        pass

Когда я попытался запустить вышеуказанный код, сообщение об ошибке не отображалось. Единственным отображаемым файлом был runfile (myfilepath), wdir (anotherpath). Я ожидал, что на выходе будет напечатано имя, которое в этом случае будет «Дональд Трамп». Любая помощь или предложение? Я использую Spyder (Python 3.6) в качестве моей платформы.

0
NewbieCoder 29 Май 2017 в 05:39

2 ответа

Лучший ответ

Ваш print(item.contents[0].find_all(n_data)[0].text) должен быть print(item.find_all("strong", {"class": "fullname show-popup-with-id "})[0].text)

import requests
from bs4 import BeautifulSoup

url = "https://twitter.com/realDonaldTrump?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor"

r = requests.get(url)
soup = BeautifulSoup(r.content, "html.parser")

links = soup.find_all("a")
g_data = soup.find_all("div", {"class": "content"})  
n_data = soup.find_all("strong", {"class": "fullname show-popup-with-id "}) 
c_data = soup.find_all("p", {"class": "TweetTextSize TweetTextSize--normal js-tweet-text tweet-text"})

for item in g_data:
    try:
        print(item.find_all("strong", {"class": "fullname show-popup-with-id "})[0].text) # chain the n_data here
    except:
        pass

Выход будет

Donald J. Trump ... ... ... Donald J. Trump

0
Aaron 29 Май 2017 в 02:50

Эта часть вашего кода

    except:

        pass

Эффективно подавляет сообщения об ошибках.

1
MarianD 29 Май 2017 в 02:46