在Python中刮第二页会产生与浏览第二页不同的数据

时间:2015-10-26 04:29:17

标签: python web-scraping beautifulsoup python-requests

我正在尝试使用Python请求和美丽的汤从www.ksl.com/auto/中获取一些数据。我可以从第一个搜索页面获得结果,但不能从后续页面获得结果。当我点击页面上的“下一步”按钮时,我使用Chrome构造的第二页请求第二页时,我得到一组不再与我的搜索查询匹配的结果。我在Stack Overflow上发现了其他问题,讨论加载后续页面的Ajax调用,并使用Chrome的Developer工具检查请求。但是,这些都没有帮助我解决这个问题 - 我在其他网站上也有这个问题。

这是example query,只返回网站上的Acuras。当您在浏览器中前进到第二页时,URL就是:https://www.ksl.com/auto/search/index?page=1。当我使用请求来点击这两个URL时,第二个搜索结果不是Acuras。是否存在我的浏览器传回服务器以保存我的过滤器的cookie?

我很感激有人可以提供有关如何获取我搜索的结果的后续页面的任何建议。

以下是我正在使用的简单代码:

from requests import get
from bs4 import BeautifulSoup

page1 = get('https://www.ksl.com/auto/search/index?keyword=&make%5B%5D=Acura&yearFrom=&yearTo=&mileageFrom=&mileageTo=&priceFrom=&priceTo=&zip=&miles=25&newUsed%5B%5D=All&page=0&sellerType=&postedTime=&titleType=&body=&transmission=&cylinders=&liters=&fuel=&drive=&numberDoors=&exteriorCondition=&interiorCondition=&cx_navSource=hp_search&search.x=63&search.y=8&search=Search+raquo%3B').text
page2 = get('https://www.ksl.com/auto/search/index?page=2').text

soup = BeautifulSoup(page1, 'html.parser')
listings = soup.findAll("div", { "class" : "srp-listing-body-right" })
listings[0] # An Acura - success!

soup2 = BeautifulSoup(page2, 'html.parser')
listings2 = soup2.findAll("div", { "class" : "srp-listing-body-right" })
listings2[0] # Not an Acura. :(

2 个答案:

答案 0 :(得分:3)

试试这个。创建一个Session对象,然后调用链接。当您将呼叫发送到下一个链接时,这将保持与服务器的会话。

import requests
from bs4 import BeautifulSoup

s = requests.Session() # Add this line

page1 = s.get('https://www.ksl.com/auto/search/index?keyword=&make%5B%5D=Acura&yearFrom=&yearTo=&mileageFrom=&mileageTo=&priceFrom=&priceTo=&zip=&miles=25&newUsed%5B%5D=All&page=0&sellerType=&postedTime=&titleType=&body=&transmission=&cylinders=&liters=&fuel=&drive=&numberDoors=&exteriorCondition=&interiorCondition=&cx_navSource=hp_search&search.x=63&search.y=8&search=Search+raquo%3B').text
page2 = s.get('https://www.ksl.com/auto/search/index?page=1').text

答案 1 :(得分:1)

是的,网站使用Cookie,以便https://www.ksl.com/auto/search/index显示或扩展您的上次搜索。更具体地说,搜索参数存储在服务器上,用于您的特定会话cookie,即PHPSESSID cookie的值。

但是,每次使用page参数的不同值时,您可以简单地始终执行完整查询(在请求参数的意义上),而不是传递该cookie。

https://www.ksl.com/auto/search/index?keyword=&make%5B%5D=Acura&yearFrom=&yearTo=&mileageFrom=&mileageTo=&priceFrom=&priceTo=&zip=&miles=25&newUsed%5B%5D=All&page=0&sellerType=&postedTime=&titleType=&body=&transmission=&cylinders=&liters=&fuel=&drive=&numberDoors=&exteriorCondition=&interiorCondition=&cx_navSource=hp_search&search.x=63&search.y=8&search=Search+raquo%3B
https://www.ksl.com/auto/search/index?keyword=&make%5B%5D=Acura&yearFrom=&yearTo=&mileageFrom=&mileageTo=&priceFrom=&priceTo=&zip=&miles=25&newUsed%5B%5D=All&page=1&sellerType=&postedTime=&titleType=&body=&transmission=&cylinders=&liters=&fuel=&drive=&numberDoors=&exteriorCondition=&interiorCondition=&cx_navSource=hp_search&search.x=63&search.y=8&search=Search+raquo%3B