让它读取下一页结果的最佳方法是什么?目前正在拉取数据,但只有第 1 页
import requests
import json
page = 1
url = "https://api-prod.grip.events/1/container/4368/search?search=&sort=name&order=asc&type_id=4907,4906,5265,4964,4904,1026,4908&page=%d"
headers = {
'x-authorization': 'a422cc2a-31fb-4b4e-a1bd-a34b561adc6c'
}
with open("list.txt", "w") as f:
for page in range(1, 1000):
response = requests.get(url % page, headers=headers).json()
contacts = response["data"]
for contact in contacts:
target = "%s\t%s\t%s\t%s" % (contact["company_name"], contact["job_title"], contact["name"], contact["job_industry"])
f.write(target + "\n")
print(target)
问题在于,你是在为
每一页
的结果创建一个新的
requests.get()
请求,但你却在将所有内容写入
同一个文件
"list.txt"
中,而没有在每一页之间进行区分。
以下是如何修改你的代码,使其可以遍历所有页面并将结果保存到单独的文件中:
import requests
import json
url = "https://api-prod.grip.events/1/container/4368/search?search=&sort=name&order=asc&type_id=4907,4906,5265,4964,4904,1026,4908&page={}"
headers = {'x-authorization': 'a422cc2a-31fb-4b4e-a1bd-a34b561adc6c'}
for page in range(1, 1000):
response = requests.get(url.format(page), headers=headers)
response.raise_for_status() # 检查请求是否成功
data = response.json()
contacts = data["data"]
if not contacts: # 如果当前页面没有数据,则退出循环
break
with open(f"list_page_{page}.txt", "w") as f:
for contact in contacts:
target = f"{contact['company_name']}\t{contact['job_title']}\t{contact['name']}\t{contact['job_industry']}"
f.write(target + "\n")
print(target)
这段代码做了以下几件事:
-
为每一页创建一个单独的文件:
f"list_page_{page}.txt"
会为每一页创建一个新的文件,例如list_page_1.txt
,list_page_2.txt
等等。 -
检查请求是否成功:
使用
response.raise_for_status()
来检查请求是否成功,如果出现错误会抛出异常。 -
检查数据是否为空:
在每一页请求后,检查
data["data"]
是否为空。如果为空,说明已经到达最后一页,可以跳出循环。
这样修改后,你的代码就可以遍历所有页面并将结果保存到不同的文件中。
标签:python,web-scraping From: 72483889