2017-05-18 4 views
1

Ich versuche, durch Google News-Suchergebnisse mit Pythons requests zu kratzen, um Links zu verschiedenen Artikeln zu erhalten. Ich bekomme die Links mit Beautiful Soup.Warum Pythons Anfragen Teile des Quellcodes transformieren?

Das Problem, das ich bekomme, ist, dass in der Quellansicht des Browsers alle Links normal aussehen, nach der Operation werden sie geändert - alle beginnen mit "/ url? Q =" und nachdem der "Kern" der Verbindung beendet ist Dort steht eine Zeichenkette, die mit "&" beginnt. Auch - einige Zeichen innerhalb der Link ebenfalls geändert - zum Beispiel url:

http://www.azonano.com/news.aspx?newsID=35576

Änderungen:

http://www.azonano.com/news.aspx%newsID%35576

Ich verwende Standard "getting started" Code:

import requests, bs4 


url_list = list() 
url = 'https://www.google.com/search?hl=en&gl=us&tbm=nws&authuser=0&q=graphene&oq=graphene&gs_l=news-cc.3..43j0l9j43i53.2022.4184.0.4322.14.10.3.1.1.1.166.884.5j5.10.0...0.0...1ac.1.-Q2j3YFqIPQ' 
res = requests.get(url) 
res.raise_for_status() 

soup = bs4.BeautifulSoup(res.text, 'html.parser') 

for link in soup.select('h3 > a'):     
     url_list.append(link.get('href')) 

# First link on google news page is: 
# https://www.theengineer.co.uk/graphene-sensor-could-speed-hepatitis-diagnosis/ 

print url_list[0] #this line will print url modified by requests. 

Ich weiß, dass es möglich ist, dieses Problem zu umgehen, indem Sie verwenden, aber ich möchte zu wissen, wo liegt eine Ursache dieses Problems mit requests (oder plausiblen nicht mit requests aber die Art, wie ich es benutze).

Danke für jede Hilfe!

+1

Präsentieren Sie ein [MCVE], dass wir das Problem tatsächlich sehen können. –

+0

Der Quellcode sieht ursprünglich tatsächlich so aus und wird tatsächlich dynamisch in das geändert, was Sie im Element-Inspektor Ihres Browsers durch Javascript sehen. Verwenden Sie * View Source * (nein, nicht "inspect element", sondern * View Source *), um zu bestätigen. – deceze

+0

@deceze - Wenn ich _View Source_ ich immer noch die gleichen Verbindungen (unverändert) [link] (view-source sehen: https: //www.google.com/search hl = en & gl = us & TBM = nws & authuser = 0 & q = Graphen & oq = Graphen & gs_l = Nachrichten-cc.3.43j0l9j43i53.2022.4184.0.4322.14.10.3.1.1.166.884.5j5.10.0 ... 0.0 ... 1ac.1.-Q2j3YFqIPQ) - wenn ich nach Azonano Links suche, Sie haben immer noch "?", "=" Zeichen. – KluCzarek

Antwort

1

Sie vergleichen, was Sie sehen, mit einem Browser, mit welchen Anfragen erzeugt wird (d. H. Es gibt keinen User-Agent-Header). Wenn Sie dies angeben, bevor Sie die erste Anfrage machen, spiegelt sich darin wider, was Sie in einem Webbrowser sehen würden. Google bedient die Anfragen unterschiedlich wie es aussieht:

url = 'https://www.google.com/search?hl=en&gl=us&tbm=nws&authuser=0&q=graphene&oq=graphene&gs_l=news-cc.3..43j0l9j43i53.2022.4184.0.4322.14.10.3.1.1.1.166.884.5j5.10.0...0.0...1ac.1.-Q2j3YFqIPQ' 
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'} # I just used a general Chrome 41 user agent header 
res = requests.get(url, headers=headers) 
+0

Vielen Dank! Es funktioniert gut. – KluCzarek

Verwandte Themen