Python 请求无法获取同一站点上的其他页面

问题描述 投票:0回答:1

使用 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。感谢任何帮助,很想知道我的请求库是否做错了什么,谢谢!

python web-scraping beautifulsoup python-requests
1个回答
0
投票

内容动态呈现并从 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}
© www.soinside.com 2019 - 2024. All rights reserved.