热线电话:13121318867

登录
2019-01-28 阅读量: 831
试图抓住网页上所有鞋子的网站,但不断返回无

import requests

from bs4 import BeautifulSoup as bs

import json

url = 'https://www.goat.com/sneakers'

headers= {

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)

AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98

Safari/537.36',

}

page = requests.get(url, headers=headers).text

soup = bs(page, "html.parser")

containers = soup.find_all('a', {'class': 'cell'})

for container in containers:

print(container)

解决办法:

网页不会直接响应数据,而是在初始请求之后使用JavaScript加载。这就是为什么你没有看到任何东西:原始的HTML没有运动鞋数据。从返回JSON的端点检索数据。直接请求更容易。

使用Web浏览器中内置的开发人员工具,我们可以看到POST请求:

https://2fwotdvm2o-dsn.algolia.net/1/indexes/product_variants_v2/query?x-algolia-agent=Algolia for vanilla JavaScript 3.25.1&x-algolia-application-id=2FWOTDVM2O&x-algolia-api-key=ac96de6fef0e02bb95d433d8d5c7038a

而且有效载荷是

{"params":"distinct=true&facetFilters=()&facets=%5B%22size%22%5D&hitsPerPage=20&numericFilters=%5B%5D&page=0&query="}

我们可以直接请求这个请求,并使用json()响应对象的方法来实际使用数据,例如:

import json

import requests

url = 'https://2fwotdvm2o-dsn.algolia.net/1/indexes/product_variants_v2/query?x-algolia-agent=Algolia for vanilla JavaScript 3.25.1&x-algolia-application-id=2FWOTDVM2O&x-algolia-api-key=ac96de6fef0e02bb95d433d8d5c7038a'

data = {"params":"distinct=true&facetFilters=()&facets=%5B%22size%22%5D&hitsPerPage=20&numericFilters=%5B%5D&page=0&query="}

r = requests.post(url, data=json.dumps(data))

print(r.json()['hits'][0])

0.0000
1
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子