我正在嘗試獲取任何令牌的首次交易的“發件人”列中的地址。由于經常有新事務使該表動態化,因此我希望能夠隨時使用決議器選擇器獲取此資訊。這是我嘗試的方法:
第一步:獲取總頁數
第二步:將該數字插入到 URL 中以獲得最早的頁碼。
第三步:回圈“發件人”列并提取第一個地址。
它回傳一個空串列。我無法弄清楚問題的根源。任何建議將不勝感激。
from parsel import Selector
contract_address = "0x431e17fb6c8231340ce4c91d623e5f6d38282936"
pg_num_url = f"https://bscscan.com/token/generic-tokentxns2?contractAddress={contract_address}&mode=&sid=066c697ef6a537ed95ccec0084a464ec&m=normal&p=1"
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"}
response = requests.get(pg_num_url, headers=headers)
sel = Selector(response.text)
pg_num = sel.xpath('//nav/ul/li[3]/span/strong[2]').get() # Attempting to extract page number
url = f"https://bscscan.com/token/generic-tokentxns2?contractAddress={contract_address}&mode=&sid=066c697ef6a537ed95ccec0084a464ec&m=normal&p={pg_num}" # page number inserted
response = requests.get(url, headers=headers)
sel = Selector(response.text)
addresses = []
for row in sel.css('tr'):
addr = row.xpath('td[5]//a/@href').re('/token/([^#?] )')[0][45:]
addresses.append(addr)
print(addresses[-1]) # Desired address

uj5u.com熱心網友回復:
該網站似乎正在使用服務器端會話跟蹤和安全令牌來使抓取更加困難。
我們可以通過復制他們的行為來解決這個問題!
如果您查看網路檢查器,您會發現在我們第一次連接到網站時,會向我們發送一些 cookie:

此外,當我們單擊其中一個表的下一頁時,我們會看到這些 cookie 被發送回服務器:

最后,表格頁面的 url 包含稱為sidthis 的內容,通常代表security id可以在第一頁正文中找到的內容。如果您檢查頁面源代碼,您會發現它隱藏在 javascript 中:

現在我們需要把所有這些放在一起:
- 啟動
Session將跟蹤 cookie的請求 - 轉到令牌主頁并接收cookie
sid在令牌主頁中找到- 使用cookies和
sidtoken來抓取表格頁面
我已經修改了你的代碼,它最終看起來像這樣:
import re
import requests
from parsel import Selector
contract_address = "0x431e17fb6c8231340ce4c91d623e5f6d38282936"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
}
# we need to start a session to keep track of cookies
session = requests.session()
# first we make a request to homepage to pickup server-side session cookies
resp_homepage = session.get(
f"https://bscscan.com/token/{contract_address}", headers=headers
)
# in the homepage we also need to find security token that is hidden in html body
# we can do this with simple regex pattern:
security_id = re.findall("sid = '(. ?)'", resp_homepage.text)[0]
# once we have cookies and security token we can build the pagination url
pg_num_url = (
f"https://bscscan.com/token/generic-tokentxns2?"
f"contractAddress={contract_address}&mode=&sid={security_id}&m=normal&p=2"
)
# finally get the page response and scrape the data:
resp_pagination = session.get(pg_num_url, headers=headers)
addresses = []
for row in Selector(resp_pagination.text).css("tr"):
addr = row.xpath("td[5]//a/@href").get()
if addr:
addresses.append(addr)
print(addresses) # Desired address
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/337873.html
