我尝试使用Python(BeautifulSoup)从少数网站收集数据。但是,有时访问搜索结果很困难,例如:
import requests
from bs4 import BeautifulSoup
url1 = 'https://auto.ria.com/legkovie/city/vinnica/?page=1'
url2= 'https://auto.ria.com/search/?top=11&category_id=1&state[0]=1'
def get_value(url):
r = requests.get(url, headers = {'Accept-Encoding' : 'deflate'})
print("Response Time: {}".format(r.elapsed.total_seconds()))
soup = BeautifulSoup(r.text, 'lxml')
data = soup.find('span', attrs = {'id' : 'resultsCount'}).find('strong')
print('{} \n'.format(data))
get_value(url1)
get_value(url2)
输出结果为:
Response Time: 5.4943
<strong class="count">5 310</strong>
Response Time: 0.174867
<strong class="count">0</strong>
虽然在url2的情况下,浏览器中显示的数字是338。 我想在某些json中可以找到搜索结果,但是如何使用请求来访问它?
答案 0 :(得分:0)
我建议缩小汤品的细节,看看那里有什么。您可以尝试使用findAll而不是查找和打印结果。您也可以尝试剥离最终调用以查找(对于强标记)并打印结果。一旦您调查较大的对象,您可能会看到正在发生的事情。它可能是url2标记不同,你必须调整你的功能以适应。
答案 1 :(得分:0)
您的代码运行正常,url2返回预期的结果。通过查看chrome的页面来源:
<span id="resultsCount" class="hide">Найдено <strong class="count">0</strong> объявлений</span>
这是你试图用美丽的汤找到的标签。 chrome中显示的数字和程序的输出是相同的!
<strong class="count">0</strong>
此外,搜索结果不会在json中返回。如果您检查响应标题:
Content-Type: text/html
也许您希望响应包含整个标记?如果是这种情况,请尝试:
data = soup.find('span', attrs = {'id' : 'resultsCount'})