亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在使用請求的某個頁面之后無法解析鏈接

在使用請求的某個頁面之后無法解析鏈接

瀟瀟雨雨 2022-06-22 15:30:58
我使用 python 創建了一個腳本來解析遍歷多個頁面的不同項目的鏈接。為了從它的登錄頁面解析鏈接,get請求也可以工作,所以我get在第一頁使用了請求。但是,需要發出帶有適當參數的發布請求才能從下一頁獲取鏈接。我也這樣做了。該腳本現在可以解析最多 11 個頁面的鏈接。當它在第 12 頁之后出現問題,依此類推。該腳本不再起作用。我嘗試了不同的頁面,例如 20,50,100,150。沒有一個成功。我試過:import timeimport requestsfrom bs4 import BeautifulSoupres_url = 'https://www.brcdirectory.com/InternalSite//Siteresults.aspx?'params = {    'CountryId': '0',    'CategoryId': '49bd499b-bc70-4cac-9a29-0bd1f5422f6f',    'StandardId': '972f3b26-5fbd-4f2c-9159-9a50a15a9dde'}with requests.Session() as s:    page = 11    while True:        print("**"*5,"trying with page:",page)        req = s.get(res_url,params=params)        soup = BeautifulSoup(req.text,"lxml")        if page==1:            for item_link in soup.select("h4 > a.colorBlue[href]"):                print(item_link.get("href"))        else:            payload = {i['name']:i.get('value') for i in soup.select('input[name]')}            payload['__EVENTTARGET'] = 'ctl00$ContentPlaceHolder1$gv_Results'            payload['__EVENTARGUMENT'] = f"{'Page$'}{page}"            payload['ctl00$ContentPlaceHolder1$ddl_SortValue'] = 'SiteName'        res = s.post(res_url,params=params,data=payload)        sauce = BeautifulSoup(res.text,"lxml")        if not sauce.select("h4 > a.colorBlue[href]"):break        for elem_link in sauce.select("h4 > a.colorBlue[href]"):            print(elem_link.get("href"))        page+=1        time.sleep(3)如何使用請求在 11 頁后抓取鏈接?
查看完整描述

1 回答

?
呼如林

TA貢獻1798條經驗 獲得超3個贊

我認為您的抓取邏輯是正確的,但是在您的循環中,您每次都在執行 GET + POST,而您應該第一次執行 GET,然后為下一次迭代發出 POST(如果您想要 1 次迭代 = 1 頁)


一個例子 :


import requests

from bs4 import BeautifulSoup


res_url = 'https://www.brcdirectory.com/InternalSite//Siteresults.aspx?'


params = {

    'CountryId': '0',

    'CategoryId': '49bd499b-bc70-4cac-9a29-0bd1f5422f6f',

    'StandardId': '972f3b26-5fbd-4f2c-9159-9a50a15a9dde'

}


max_page = 20


def extract(page, soup):

    for item_link in soup.select("h4 a.colorBlue"):

        print("for page {} - {}".format(page, item_link.get("href")))


def build_payload(page, soup):

    payload = {}

    for input_item in soup.select("input"):

        payload[input_item["name"]] = input_item["value"]

    payload["__EVENTTARGET"]="ctl00$ContentPlaceHolder1$gv_Results"

    payload["__EVENTARGUMENT"]="Page${}".format(page)

    payload["ctl00$ContentPlaceHolder1$ddl_SortValue"] = "SiteName"

    return payload


with requests.Session() as s:

    for page in range(1, max_page):

        if (page > 1):

            req = s.post(res_url, params = params, data = build_payload(page, soup))

        else:

            req = s.get(res_url,params=params)

        soup = BeautifulSoup(req.text,"lxml")

        extract(page, soup)


查看完整回答
反對 回復 2022-06-22
  • 1 回答
  • 0 關注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號