使用Python请求生成错误的搜索

时间:2017-08-19 21:28:56

标签: python beautifulsoup python-requests

我要做的是搜索StackOverflow以获得答案。我知道它可能以前做过,但我想再做一次。使用GUI。无论如何,现在我正在努力寻找一个问题投票最多的页面。我注意到在试图看到如何进入嵌套div以获取我的搜索关闭的第一个答案的链接并将我带到错误的地方。我正在使用BeautifulSoup和Requests以及python3来执行此操作。

#!/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)

我收到链接并输出/搜索?tab = votes& q = open%GL%20cube

但是当我把它传递给params时它会这样做 https://stackoverflow.com/?/search?tab=votes&q=open%GL%20cube

我想摆脱/?/

2 个答案:

答案 0 :(得分:1)

不要将其作为参数传递,只需将其添加到URL:

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

传递requests参数后,在将新参数连接到链接之前,会在链接中添加?

Requests - Passing Parameters In URLs

另外,如上所述,您应该真正使用API​​。

答案 1 :(得分:0)

为什么不使用API

有很多搜索选项(https://api.stackexchange.com/docs/advanced-search),你可以用JSON获得响应,不需要丑陋的HTML解析。