2017-08-19 15 views
0

私がやっていることは、回答のためにStackOverflowを検索することです。私はそれがおそらく以前に行われたことを知っていますが、私はもう一度やりたいと思います。 GUIを使用します。とにかく道のりをちょっと進んでいますが、私は今質問に最も多くの票を投じてページにアクセスしようとしています。私は、ネストされたdivに入って最初の答えのリンクを取得する方法を見てしようとしている間に気づいた、私の検索がオフであったと私を間違った場所に連れて行く。私はこれを行うためにBeautifulSoupとRequestsとpython3を使用しています。Pythonリクエストで間違った検索が生成される

#!/usr/bin/env python3 
import requests 
from bs4 import BeautifulSoup 
payload = {'q': 'open GL cube'} 
page = requests.get("https://stackoverflow.com/search",params=payload) 
print(" URL IS ", page.url) 
data = page.content 
soup = BeautifulSoup(data, 'lxml') 
top = soup.find('a', {'title':'Highest voted search results'})['href'] 

print(top) 
page2 = requests.get("https://stackoverflow.com",params=top) 
print(page2.url) 
data2 = page2.content 
topSoup = BeautifulSoup(data2, 'lxml') 
for div in topSoup.find_all('div', {'class':'result-link'}): 
    print(div.text) 

iは、リンクを取得し、それは/検索?タブ=票を出力& Q =オープン%のGL%20cube

が、私はそれが https://stackoverflow.com/?/search?tab=votes&q=open%GL%20cube

Iを行うのparamsでそれを渡すとき/?/

+0

あなたはただそれを何かで置き換えることはできませんか? (okこれは醜いです:)) –

+0

それは私が思うようなエンコーディングと関係があります...それは何らかの理由でそこにランダムに接続します。 – Ian

+0

「https://stackoverflow.com」+「トップ」だけではないのはなぜですか? 'top'の値は' params'の有効な入力型ではないので、最初に解析しないと、期待しているものは得られません。 –

答えて

1

はちょうどURLに追加し、パラメータとして渡してはいけない:

page2 = requests.get("https://stackoverflow.com" + top) 

あなたはそれがリンクに新しいパラメータを連結する前に、リンクに?を追加requestsパラメータを渡したら。

Requests - Passing Parameters In URLs

また、述べたように、あなたは本当にAPIを使用する必要があります。

+0

はい、これは私がやったことです。私はそれを理解したらAPIを使ってこれをやり直すでしょう、私はAPIを読むのはかなり悪いですが、本当に良くなる必要があります。だから私はそれを理解し、私が使うだけの専用のサイトを持っていないので、それを使用できるようにいくつかのお金を費やす必要があります。 – Ian

+0

APIの@Ianは、すべてのもののように、練習が完璧になります:) 幸運。 – droravr

関連する問題