2017-05-18 1 views
1

私は、他の記事へのリンクを得るために、pythonのrequestsを使用してGoogleのニュース検索結果をスクラップしようとしています。 Beautiful Soupを使用してリンクを取得します。なぜPythonの要求がソースコードの一部を変換するのですか?

ブラウザのソースビューですべてのリンクが正常に見えますが、操作が変更された後、「/ url?q =」で始まり、リンクの「コア」が終了した後"&"で始まる一連の文字が続きます。また、 - リンク内の一部の文字も変更されている - 例えば、URLの:

:私は、標準の "はじめに" のコードを使用してい

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

:へ

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

変更を

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. 

seleniumを使用してこの問題を回避することは可能ですが、 requests(またはrequestsではなくそれ以上の可能性があるが、私がそれを使用している方法で)この問題の根本的な原因がどこにあるのかを知る。

ありがとうございました!

+1

[MCVE]に問題が実際に表示されます。 –

+0

ソースコードはもともと実際にはそのように見えますが、実際にはJavascriptでブラウザの要素インスペクタに表示される内容に動的に変更されます。ソースを見る*(いいえ、要素を調べるのではなく、*ソースを見る*)を使って確認してください。 – deceze

+0

@deceze - 私は_View Sourceを使用すると同じリンクを表示します(変更なし) [ビュー]ソース(表示ソース: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) - 私がアゾナノリンクを探すとき、彼らはまだ "?"、 "="文字を持っています。 – KluCzarek

答えて

1

あなたのブラウザに表示されている内容と、リクエストによって生成されたもの(ユーザーエージェントのヘッダーがないもの)を比較しています。最初のリクエストを行う前にこれを指定すると、Webブラウザに表示される内容が反映されます。 Googleでは次のようにリクエストを配信しています。

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

ありがとう!それは大丈夫です。 – KluCzarek

関連する問題