Python AJAX WebScrap时未接收所有文本/json数据
第一次发帖时,我不是python或web开发专家 我正在创建一个网页刮板来刮一个动态网页。我已经浏览了一些教程,并编写了一个简单的web scape入门。它可以工作,因为它正在检索一些json。然而,当在Chrome开发工具中检查响应时,我发现返回的json只是值为“null”的第一级如何获取其余的值?Python AJAX WebScrap时未接收所有文本/json数据,python,json,ajax,web-scraping,Python,Json,Ajax,Web Scraping,第一次发帖时,我不是python或web开发专家 我正在创建一个网页刮板来刮一个动态网页。我已经浏览了一些教程,并编写了一个简单的web scape入门。它可以工作,因为它正在检索一些json。然而,当在Chrome开发工具中检查响应时,我发现返回的json只是值为“null”的第一级如何获取其余的值? import requests headers = { "Accept": "application/json, text/plain, */*", "Accept-Encoding": "
import requests
headers = {
"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-US,en;q=0.9",
"Cache-Control": "max-age=0, private, must-revalidate",
"origin": "https://www.example.com",
"referer": "https://www.example.com",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
}
#AJAX Request url from the Chrome dev tools
# data parameter taken from the Chrome dev tools, "Network Tab" >"Headers Tab" > "Request Payload"
r = requests.post('https://www.example.com/api/show', headers = headers,data = {"sort":"trending","page_num":4,"per_page":12,"q":"","tags":[]})
response = r.json()
print(response)
输出:
{'response':None}
预期产出应为:
{ "response":{ "discoverables":[ { "bullet_point":null,"category": "category_1","category_url":"/url"...
我在Chrome开发工具的“网络”>“响应”下看到了上面完整的json预期结果
我试过:
- 更改标题值或忽略它们,结果没有差异
- 试图利用GET(返回状态代码404)
- 使用request.sessions
- 我试着只打印'r'而不使用.json,它返回
{“response”:null}
import requests
import json
from bs4 import BeautifulSoup as bs
url=r'https://www.indiegogo.com/explore/energy-green-tech?project_type=campaign&project_timing=all&sort=trending'
s=requests.Session()
r=s.get(url)
soup=bs(r.text,'html.parser')
token=soup.find('meta',{'name':'csrf-token'}).attrs['content']
print(token)
dataload={
'category_main': "Energy & Green Tech",
'category_top_level': "Tech & Innovation",
'page_num': 2,
'per_page': 12,
'project_timing': "all",
'project_type': "campaign",
'q': "",
'sort': "trending",
'tags': []
}
headers={
'accept': 'application/json, text/plain, */*',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'en-US,en;q=0.9',
"Cache-Control": "max-age=0, private, must-revalidate",
'content-length': str(len(json.dumps(dataload, separators=(',',':')))),
'content-type': 'application/json;charset=UTF-8',
'origin': r'https://www.indiegogo.com',
'referer': r'https://www.indiegogo.com/explore/energy-green-tech?project_type=campaign&project_timing=all&sort=trending',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36',
'x-csrf-token':token,
'x-locale': 'en'
}
r=s.post(r'https://www.indiegogo.com/private_api/discover',headers=headers,json=dataload)
print(r.json())
可能有很多事情。。。你能把你要刮的那页贴上去吗?我正在努力搜集竞选信息。我马上看到两件事,你需要在标题中包含x-csrf-token,并将“data”改为“json”。要获取有效的x-csrf-token,您可能需要使用请求会话。我之前尝试过x-csrf-token头/值,但没有成功。我将尝试使用会话并切换到json。谢谢!将“data”更改为“json”&包括x-csrf-token。不需要更改为会话。看起来需要更多地阅读请求库。