使用 Python 请求模块,我尝试向 capitoltrades_politician_site 发送请求。有多个政治人物页面,但是当我通过 ?page=2 或使用 params 参数向这些页面发送请求时,我总是会收到第一页。我还尝试添加 per_page=1000 (以在一页中显示所有政客),这也不起作用
import bs4 as bs
import requests
import time
payload = {'page': 2,
'per_page': 100,}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'}
session = requests.Session()
r = session.get('https://www.capitoltrades.com/politicians',headers=headers, params=payload)
print(r.url)
soup = bs.BeautifulSoup(r.text, 'html.parser')
politicians = soup.find_all('a', class_='index-card-link')
print(len(politicians))
with open("test.html", "w") as file:
file.write(soup.prettify())
我还尝试显式使用 ?per_page=1000 的链接(这在 Chrome 上运行良好),但它继续返回包含 12 个政治家的第一页的 html。感谢任何帮助,很想知道我的请求库是否做错了什么,谢谢!
内容动态呈现并从 API 加载。因为
requests
只能处理静态响应,所以你必须专注于 API,或者使用 selenium
之类的东西来模仿浏览器。
import requests
import pandas as pd
page = 1
data = []
while True:
json_data = requests.get(f'https://bff.capitoltrades.com/politicians?per_page=96&page={page}&pageSize=96&metric=dateLastTraded&metric=countTrades&metric=countIssuers&metric=volume').json()
data.extend(json_data.get('data'))
if page == json_data.get('meta').get('paging').get('totalPages'):
break
else:
page = page+1
pd.DataFrame(data)
_政客ID | _stateId | 派对 | 派对其他 | 区 | 名字 | 姓氏 | 昵称 | 中间名 | 全名 | 多布 | 性别 | 社交脸书 | 社交推特 | 社交Youtube | 网站 | 室 | 委员会 | 统计数据 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | C001129 | 嘎 | 共和党 | 10 | 迈克尔 | 柯林斯 | 艾伦 | 柯林斯,小迈克尔·艾伦 | 1967-07-02 | 男 | @迈克柯林斯GA | https://collins.house.gov/ | 房子 | ['hsii', 'hspw', 'hssy'] | {'dateLastTraded': '2024-01-08', 'countTrades': 6, 'countIssuers': 1, '交易量': 72500} | ||||
1 | M001135 | NC | 民主党 | 6 | 凯西 | 曼宁 | 艾伦 | 曼宁,凯西·艾伦 | 1956-12-03 | 女 | @RepKManning | https://manning.house.gov/ | 房子 | ['hsed', 'hsfa'] | {'dateLastTraded': '2024-01-01', 'countTrades': 583, 'countIssuers': 168, '交易量': 17567122} | ||||
... | |||||||||||||||||||
210 | G000579 | wi | 共和党 | 8 | 迈克尔 | 加拉格尔 | 迈克 | 约翰 | 加拉格尔,迈克尔·约翰(迈克) | 1984-03-03 | 男 | 代表迈克·加拉格尔 | @RepGallagher | https://gallagher.house.gov | 房子 | ['hlig', 'hsas', 'hszs'] | {'dateLastTraded': '2021-03-25', 'countTrades': 1, 'countIssuers': 1, 'volume': 8000} | ||
211 | L000273 | 纳米 | 民主党 | 3 | 特蕾莎 | 莱杰·费尔南德斯 | 伊莎贝尔 | 莱格·费尔南德斯,特蕾莎·伊莎贝尔 | 1959-07-01 | 女 | @RepTeresaLF | https://fernandez.house.gov/ | 房子 | ['hsed', 'hsii', 'hsru'] | {'dateLastTraded': '2021-01-20', 'countTrades': 1, 'countIssuers': 1, '交易量': 32500} |