Jak zeskrobać witrynę javascript w Pythonie?

3
CookieData 2020-09-06 22:03.

Próbuję zeskrobać stronę internetową. Próbowałem użyć dwóch metod, ale obie nie zapewniają mi pełnego kodu źródłowego witryny, którego szukam. Próbuję wydobyć tytuły wiadomości z adresu URL podanego poniżej.

URL: „https://www.todayonline.com/”

Oto dwie metody, które wypróbowałem, ale zawiodły.

Metoda 1: Piękna zupa

tdy_url = "https://www.todayonline.com/"
page = requests.get(tdy_url).text
soup = BeautifulSoup(page)
soup  # Returns me a HTML with javascript text
soup.find_all('h3')

### Returns me empty list []

Metoda 2: Selen + BeautifulSoup

tdy_url = "https://www.todayonline.com/"

options = Options()
options.headless = True

driver = webdriver.Chrome("chromedriver",options=options)

driver.get(tdy_url)
time.sleep(10)
html = driver.page_source

soup = BeautifulSoup(html)
soup.find_all('h3')

### Returns me only less than 1/4 of the 'h3' tags found in the original page source 

Proszę pomóż. Próbowałem zeskrobać inne strony z wiadomościami i jest to o wiele łatwiejsze. Dziękuję Ci.

4 answers

2
political scientist 2020-09-06 22:38.

Możesz uzyskać dostęp do danych przez API (sprawdź zakładkę Sieć):


Na przykład,

import requests
url = "https://www.todayonline.com/api/v3/news_feed/7"
data = requests.get(url).json()
2
Noname 2020-09-06 22:39.

Istnieją różne sposoby gromadzenia zawartości strony internetowej zawierającej JavaScript.

  1. Używanie seleniumze sterownikiem internetowym Firefox
  2. Korzystanie z bezgłowej przeglądarki z phantomJS
  3. Wykonywanie wywołania API przy użyciu klienta REST lub requestsbiblioteki Python

Najpierw musisz przeprowadzić badania

2
Manan Gajjar 2020-09-06 23:04.

Zaproponuję dość proste podejście,

import requests
from bs4 import BeautifulSoup as bs

page = requests.get('https://www.todayonline.com/googlenews.xml').content
soup = bs(page)
news = [i.text for i in soup.find_all('news:title')]

print(news)

wynik

['DBS named world’s best bank by New York-based financial publication',
 'Russia has very serious questions to answer on Navalny - UK',
 "Exclusive: 90% of China's Sinovac employees, families took coronavirus vaccine - CEO",
 'Three militants killed after fatal attack on policeman in Tunisia',
.....]

W razie potrzeby możesz również sprawdzić stronę XML, aby uzyskać więcej informacji.

PS Zawsze sprawdź zgodność przed usunięciem jakiejkolwiek strony internetowej :)

2
Demian Wolf 2020-09-06 23:00.

Dane wiadomości na stronie, którą próbujesz zeskrobać, są pobierane z serwera za pomocą JavaScript (nazywa się to XHR - XMLHttpRequest ). Dzieje się to dynamicznie, podczas ładowania lub przewijania strony. więc te dane nie są zwracane wewnątrz strony zwróconej przez serwer.

W pierwszym przykładzie otrzymujesz tylko stronę zwróconą przez serwer - bez nowości, ale z JS, który ma je pobierać. Ani żądania, ani BeautifulSoup nie mogą wykonywać JS.

Możesz jednak spróbować odtworzyć żądania pobierające tytuły wiadomości z serwera za pomocą żądań Pythona. Wykonaj następujące kroki:

  1. Otwórz DevTools swojej przeglądarki (zwykle musisz w tym celu nacisnąć F12lub Ctrl+ Shit+ I) i przyjrzyj się żądaniom, które otrzymują tytuły wiadomości z serwera. Czasami jest to nawet łatwiejsze niż skrobanie stron internetowych za pomocą BeautifulSoup. Oto zrzut ekranu (Firefox):
  1. Skopiuj link żądania (kliknij prawym przyciskiem myszy -> Kopiuj -> Kopiuj łącze) i przekaż go do requests.get(...).

  2. Uzyskaj .json()prośbę. Zwróci dykt, z którym łatwo się pracuje. Aby lepiej zrozumieć strukturę dyktowania, polecałbym użyć pprintzamiast prostego druku. Pamiętaj, że musisz to zrobić from pprint import pprintprzed użyciem.

Oto przykład kodu, który pobiera tytuły z głównych wiadomości na stronie:

import requests


nodes = requests.get("https://www.todayonline.com/api/v3/news_feed/7")\
        .json()["nodes"]
for node in nodes:
    print(node["node"]["title"])

Jeśli chcesz zeskrobać grupę wiadomości pod podpisem, musisz zmienić numer po news_feed/w adresie URL żądania (aby go uzyskać, wystarczy przefiltrować żądania według „news_feed” w DevTools i przewinąć stronę z wiadomościami w dół).

Czasami witryny internetowe są chronione przed botami (chociaż witryna, którą próbujesz zeskrobać, nie). W takich przypadkach może być konieczne wykonanie również tych czynności .

MORE COOL STUFF

Jana Duggar: Wszystko, co powiedziała o miłości i jej 5-letnie okno na znalezienie „jednego”

Jana Duggar: Wszystko, co powiedziała o miłości i jej 5-letnie okno na znalezienie „jednego”

Jana Duggar otwarcie mówiła o swoich poszukiwaniach miłości. Oto wszystko, co powiedziała na ten temat i jej pięcioletnie okno na małżeństwo.

Sam Heughan dokładnie wie, co weźmie z zestawu „Outlander” - „Czuję się, jakbym był Jamiem, kiedy je zakładam”

Sam Heughan dokładnie wie, co weźmie z zestawu „Outlander” - „Czuję się, jakbym był Jamiem, kiedy je zakładam”

Gwiazda „Outlandera”, Sam Heughan, niedawno ujawnił, co zabierze z planu, aby upamiętnić Jamiego Frasera, rolę, która uczyniła go gwiazdą.

Piosenka wczesnych Beatlesów, która była jednym z „najbardziej ekscytujących występów” zespołu, według Insidera Fab Four

Piosenka wczesnych Beatlesów, która była jednym z „najbardziej ekscytujących występów” zespołu, według Insidera Fab Four

„She Loves You” została napisana w godzinę, nagrana w jeden dzień i była piosenką The Beatles z jednym z ich najlepszych wykonań w karierze.

Dolly Parton pomogła swojej „inwalidzkiej” babci, gdy żadne inne wnuki by tego nie zrobiły - ona też zrobiła jej psikusa

Dolly Parton pomogła swojej „inwalidzkiej” babci, gdy żadne inne wnuki by tego nie zrobiły - ona też zrobiła jej psikusa

Dolly Parton i jej babcia Bessie miały szczególny związek. Babcia Parton była bardzo chora, ale to nie powstrzymało Dolly przed zrobieniem jej psikusa.

Jakie jest najtwardsze drewno na świecie?

Jakie jest najtwardsze drewno na świecie?

Można by pomyśleć, że dąb lub hikora są wytrzymałe, ale jeśli chodzi o najtwardsze drewno na świecie, to nawet się do nich nie zbliżają.

10 najstraszniejszych stworzeń morskich kryjących się w głębinach oceanu

10 najstraszniejszych stworzeń morskich kryjących się w głębinach oceanu

Ocean jest pełen piękna, ale kryje też jedne z najstraszniejszych stworzeń morskich na świecie. Wiele z nich czai się głęboko pod powierzchnią oceanu, w mrocznym, podciśnieniowym świecie głębin morskich.

10 najlepszych zaklęć miecza w grze Minecraft

10 najlepszych zaklęć miecza w grze Minecraft

Jeśli walczysz z wrogimi mobami lub przygotowujesz się do scenariuszy PvP, znajomość najlepszych zaklęć miecza w Minecrafcie może dać ci znaczną przewagę. Zaklinanie mieczy pozwala zadawać większe obrażenia, zwiększać liczbę przedmiotów wypadających z potworów i wydłużać trwałość miecza.

13 krajów socjalistycznych, które wyglądają zupełnie inaczej

13 krajów socjalistycznych, które wyglądają zupełnie inaczej

Kiedy ludzie mówią o krajach socjalistycznych, często wyobrażają sobie pełną kontrolę rządu i brak własności prywatnej. Jednak w praktyce gospodarki socjalistyczne są bardzo zróżnicowane.

Podsumowanie Niedźwiedzia: Czy Marcus jest najmilszym, najłagodniejszym i najszczerszym mężczyzną w Chicago?

Podsumowanie Niedźwiedzia: Czy Marcus jest najmilszym, najłagodniejszym i najszczerszym mężczyzną w Chicago?

W „Children” pojawia się epizod ze znanym nazwiskiem i kilka druzgocących wiadomości

Czy za 9800 dolarów „zapakowałbyś ich” do tej siedmiomiejscowej Toyoty RAV4 z 2008 roku?

Czy za 9800 dolarów „zapakowałbyś ich” do tej siedmiomiejscowej Toyoty RAV4 z 2008 roku?

Uważa się, że ten RAV4 jest w doskonałym stanie i jest przygotowany do gry w muzyczne krzesła.

Furgonetka dostawcza Amazon zapala się w wyniku ognistej eksplozji podczas letnich upałów w Houston

Furgonetka dostawcza Amazon zapala się w wyniku ognistej eksplozji podczas letnich upałów w Houston

Na nagraniu z drona uchwycono strażaków, którzy najwyraźniej walczyli o ugaszenie pożaru.

Marvel's Black Panther Show będzie najważniejszym serialem animowanym w historii

Marvel's Black Panther Show będzie najważniejszym serialem animowanym w historii

Eyes of Wakanda jest bezpośrednio powiązany z MCU, a także aktualizacje X-Men '97, What If..., Daredevil i nie tylko.

Aktorzy serialu Laguna Beach: Gdzie są teraz?

Aktorzy serialu Laguna Beach: Gdzie są teraz?

„Laguna Beach” opowiadało o życiu licealistów Lauren Conrad, Kristin Cavallari, Stephena Collettiego i innych w połowie lat 2000. Oto, gdzie obecnie znajdują się członkowie obsady reality show MTV.

Historia randek Avy Gardner: spojrzenie wstecz na małżeństwa i romanse ikony Hollywood

Historia randek Avy Gardner: spojrzenie wstecz na małżeństwa i romanse ikony Hollywood

Ava Gardner była żoną Mickeya Rooneya i Franka Sintry, a także spotykała się z kilkoma innymi gwiazdami Hollywood. Oto spojrzenie wstecz na historię randek Avy Gardner.

Kim jest żona Johna Cleese'a? Wszystko o Jennifer Wade

Kim jest żona Johna Cleese'a? Wszystko o Jennifer Wade

John Cleese poślubił swoją żonę Jennifer Wade w 2012 roku. Oto wszystko, co warto wiedzieć o żonie Johna Cleese'a, Jennifer Wade.

Posiadłość Kim Zolciak-Biermann i Kroy Biermann List w Gruzji na sprzedaż w Splicie

Posiadłość Kim Zolciak-Biermann i Kroy Biermann List w Gruzji na sprzedaż w Splicie

Gwiazda „Prawdziwych gospodyń domowych z Atlanty” i jej były mąż, zawodowy zawodnik NFL, po raz pierwszy kupili rozległą rezydencję Alpharetta w 2012 roku.

zaimki są bardzo przerażające

Uderzyło mnie to nagle, jak to często bywa. Znowu jest w połowie <Nie, nie ten w Pacyfiku, bordowy, ten na karnawale> Każdy nagłówek jest głośny…..

3 sprawdzone sposoby na poprawę umiejętności pisania

Korzyści płynące z pisania i strategie, które Ci w tym pomogą

3 sprawdzone sposoby na poprawę umiejętności pisania

W 2022 roku, wraz z wydaniem GPT-3, umiejętność pisania wydaje się tracić na znaczeniu. Dzięki sztucznej inteligencji osoby o słabym pisaniu mogą również generować wysokiej jakości personel.

Powolna erozja: ujawnianie sposobów, w jakie ludzie marnują swoje kariery

Powolna erozja: ujawnianie sposobów, w jakie ludzie marnują swoje kariery

W dzisiejszym dynamicznym i konkurencyjnym świecie kariera odgrywa znaczącą rolę w rozwoju osobistym, stabilności finansowej i ogólnej satysfakcji z życia. Jednak wiele osób wpada w nieustający cykl stagnacji i niezadowolenia, stopniowo marnując swoje życie zawodowe.

Co wpływa na podcast?

Co wpływa na podcast?

W zeszłym tygodniu zauważyłem komunikat prasowy, wysłany za pośrednictwem PressGazette (brytyjski serwis informacyjny). W artykule ogłoszono, że Acast, skandynawska firma hostingowa i reklamowa podcastów, będzie przewodzić konsorcjum „prawdopodobnie najbardziej wpływowych” wydawców podcastów.

Language