簡體   English   中英

如何使用 bs4 抓取 python 中的多個頁面

[英]how to scrape multiple pages in python with bs4

我有一個查詢,因為我一直在抓取網站“https://www.zaubacorp.com/company-list”,因為無法從表中的給定鏈接中抓取 email id。 雖然需要從給定表中的鏈接中刮取 Name、Email 和 Director。 誰能解決我的問題,因為我是 web 的新手,使用 python 和漂亮的湯和請求進行抓取。

謝謝Dieksha

 #Scraping the website
#Import a liabry to query a website
import requests
#Specify the URL
companies_list = "https://www.zaubacorp.com/company-list"
link = requests.get("https://www.zaubacorp.com/company-list").text
#Import BeautifulSoup
from bs4 import BeautifulSoup
soup = BeautifulSoup(link,'lxml')
soup.table.find_all('a')
all_links = soup.table.find_all('a')
for link in all_links:
    print(link.get("href"))

好吧,讓我們分解網站,看看我們能做些什么。

首先,我可以看到這個網站是分頁的。 這意味着我們必須處理像網站這樣簡單的事情,使用部分 GET 查詢字符串來確定我們向 AJAX 調用請求的頁面,當您單擊下一步時,該調用正在用新數據填充表格。 通過單擊下一頁和后續頁面,我們很幸運該網站使用了 GET 查詢參數。

我們用於請求網頁抓取的 URL 將是

https://www.zaubacorp.com/company-list/p-<page_num>-company.html

我們將編寫一些代碼,用從 1 到您要抓取的最后一頁的值填充該頁面 num。 在這種情況下,我們不需要做任何特殊的事情來確定表格的最后一頁,因為我們可以跳到最后,發現它將是第 13,333 頁。 這意味着我們將向該網站發出 13,333 個頁面請求,以完全收集其所有數據。

至於從網站收集數據,我們需要找到包含信息的表,然后迭代 select 元素以提取信息。

在這種情況下,我們實際上可以“作弊”一點,因為頁面上似乎只有一個 tbody。 我們想遍歷所有的並拉出文本。 我要去go前面寫樣例。

import requests
import bs4

def get_url(page_num):
    page_num = str(page_num)
    return "https://www.zaubacorp.com/company-list/p-1" + page_num + "-company.html"

def scrape_row(tr):
    return [td.text for td in tr.find_all("td")]

def scrape_table(table):
    table_data = []
    for tr in table.find_all("tr"):
        table_data.append(scrape_row(tr))
    return table_data

def scrape_page(page_num):
    req = requests.get(get_url(page_num))
    soup = bs4.BeautifulSoup(req.content, "lxml")
    data = scrape_table(soup)
    for line in data:
        print(line)

for i in range(1, 3):
    scrape_page(i)

此代碼將抓取網站的前兩頁,只需更改 for 循環范圍即可獲得全部 13,333 個頁面。 從這里您應該能夠修改打印輸出邏輯以保存到 CSV。

運行代碼的輸出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM