So habe ich durch Al Sweigart Online-Automatisierung der langweilig Stuff With Python Tutorials gearbeitet, und ich habe gerade zum Webscraping Teil. Hier ist mein Code mit einer Beschreibung dessen, was das Programm tun soll:Grundlegende Webscraping mit Python (Schöne Suppe und Anfragen)
#! python3
# lucky.py - A small program that allows you to get search keywords from
# command line arguments, retrieve the search results page, and open
# a new browser tab for each result
# Steps:
# 1. Read the command line arguments from sys.argv
# 2. Fetch the search result page with the requests module
# 3. Find the links to each search result
# 4. Call the webbrowser.open() function to open the web browser
import sys, requests, bs4, webbrowser
# 1. Read the command line arguments from sys.argv
print('Googling...')
if len(sys.argv) > 1:
search = ' '.join(sys.argv[1:])
url = "https://www.google.com/#q="
for i in range(len(search.split())):
url += search.split()[i] + "+"
# 2. Fetch the search result page with the requests module
page = requests.get(url)
# 3. Find the links to each search result
soup = bs4.BeautifulSoup(page.text, 'lxml')
linkElems = soup.select('.r a')
# 4. Call the webbrowser.open() function to open the web browser
numOpen = min(5, len(linkElems))
for i in range(numOpen):
webbrowser.open("http://google.com" + linkElems[i].get('href'))
Also hier das Problem ist, dass, wenn ich die Länge linkElems überprüfen, es 0 ist, was bedeutet, dass die soup.select (‘r ein. Der Befehl '' konnte den unter Element < definierten Inhalt nicht zusammenfassen. a> Inside class = r (eine Klasse, die nur für Suchergebnisse in Google verwendet wird, wie bei Verwendung der Entwicklertools zu sehen ist). Dadurch öffnen sich in meinem Browser keine Webseiten der Suchergebnisse.
Ich denke, das Problem hat etwas zu tun, entweder mit dem HTML-Parser nicht richtig funktioniert, oder Google ändert die Art, wie ihre HTML-Code funktioniert (?). Jeder Einblick in dieses Problem würde sehr geschätzt werden!
Sie suchen also ein Ankerelement? Es ist durchaus möglich, dass Google den Inhalt, den sie bedienen, geändert hat, sodass Sie auf diese Weise nicht mehr das finden, wonach Sie suchen. Sie müssen sich ihren Quellcode ansehen und prüfen, welches Tag die gewünschten Informationen enthält, und dann das extrahieren. –
@ cᴏʟᴅsᴘᴇᴇᴅ Ja, genau. Das Lustige daran ist, dass Google nach Überprüfung des Quellcodes immer noch class = r für Suchergebnisse und Ankerelemente unter denen für entsprechende Links verwendet. Ich werde mehr auf die Quelle eingehen und sehen, ob es ein anderes wichtiges Problem gibt. Danke für den Kommentar! – Rohan
Es ist durchaus möglich, dass das dann über JS geladen wird ... vielleicht müssen Sie Phantomjs oder Selen betrachten. Viel Glück! –