実際の問題 - 価格が異なるエンドポイントへ別の非同期リクエストがロードされています。あなたはあなたのコードでそれをシミュレートする必要があります。
from bs4 import BeautifulSoup
import requests
url = "https://www.predictit.org/Contract/4393/Will-Obama-pardon-Hillary-Clinton#openoffers"
price_url = "https://www.predictit.org/PrivateData/GetPriceListAjax?contractId=4393"
with requests.Session() as session:
session.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36'}
session.get(url) # visit main page
# request prices
response = session.get(price_url)
soup = BeautifulSoup(response.content, "html.parser")
tables = soup.select("table.table-info")
for row in tables[0].select("tr")[2:]:
values = [td.find(text=True, recursive=False) for td in row('td') if td.text]
print(values)
は(デモ用)最初に「はい」テーブルの内容を印刷します:我々は介してウェブ・スクレイピングセッションを維持している
[u'13', u'1555', u'12', u'240']
[u'14', u'707', u'11', u'2419']
[u'15', u'2109', u'10', u'3911']
[u'16', u'1079', u'9', u'2634']
[u'17', u'760', u'8', u'2596']
[u'18', u'510', u'7', u'970']
[u'19', u'973', u'6', u'1543']
[u'20', u'483', u'5', u'2151']
[u'21', u'884', u'4', u'1195']
[u'22', u'701', u'3', u'950']
注意requests.Session()
はこちら。
contractId
GETパラメータが含まれています(価格が異なるページをリクエストする場合は、適切なcontractId
を必ず使用してください)。
を返します。これは完全に機能します。ありがとうございました!! – gtownrower