第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

垂直抓取表格

垂直抓取表格

12345678_0001 2023-04-18 16:14:38
首先讓我說(shuō)我討厭問(wèn)一個(gè)非常盲目的“請(qǐng)為我寫它”式的問(wèn)題,因?yàn)槲易约和ǔO矚g學(xué)習(xí)這樣的東西,但我時(shí)間緊迫。最重要的是,昨天是我第一次得知 BeautifulSoup 的存在,而且我已經(jīng)有大約 7 年沒(méi)有編寫任何真正的腳本或編碼了,所以我來(lái)了。簡(jiǎn)而言之,我正在嘗試創(chuàng)建一個(gè)抓取工具來(lái)遍歷包含垂直排列的表格的多個(gè)頁(yè)面,并將數(shù)據(jù)輸出到 csv。因此,在第一遍中,我需要讀取第一列以在我的 CSV 中創(chuàng)建標(biāo)題行,然后對(duì)于其余 URL,只需讀取第二列以創(chuàng)建數(shù)據(jù)行。我想我可以弄清楚如何使用 URL 遍歷輸入文件,但如果有人對(duì)此有快速了解,我的計(jì)劃是一個(gè)輸入文件,每行都有一個(gè) url。該表的編碼非常糟糕,有大量的空格和回車符,但我想我已經(jīng)處理好了。我被卡住的地方是垂直循環(huán)遍歷列。為了方便起見(jiàn),表結(jié)構(gòu)如下所示:<div id="mydiv">    <table>      <tr>        <td>header 1</td>        <td>value 1</td>      </tr>      <tr>        <td>header 2</td>        <td>value 2</td>      </tr>      <tr>        <td>header 3</td>        <td>value 3</td>      </tr>    </table></div>昨天我在 google 上玩了 30 分鐘,把我?guī)У搅丝梢詫⒈砀駥?dǎo)出為 CSV 并刪除所有多余字符的地方。它是頁(yè)面上的第一個(gè),沒(méi)有 ID,但到目前為止我寫的只是輸出那個(gè)表。表所在的 DIV 似乎有一個(gè)唯一的 ID,所以如果涉及到它,我可能可以隔離它。from bs4 import BeautifulSoupimport requestsimport csvurl="https://myurl.com/"html = requests.get(url).textsoup = BeautifulSoup(html, "lxml")table = soup.find("table")output_rows = []for table_row in table.findAll('tr'):    columns = table_row.findAll('td')    output_row = []    for column in columns:         output_row.append(' '.join(column.text.split()))    output_rows.append(output_row)with open('output.csv', 'w') as csvfile:    writer = csv.writer(csvfile)    writer.writerows(output_rows)這讓我把表格刮成水平格式(盡管 CSV 中每行數(shù)據(jù)之間有一條額外的線,我還沒(méi)有弄清楚)。但我需要的是跨多個(gè) URL 垂直抓取它,最后得到一個(gè)如下所示的 CSV:header1,header2,header3value1,value2,value3value1,value2,value3 (from next URL in the list)value1,value2,value3 (from next url in the list and so on)
查看完整描述

1 回答

?
浮云間

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊

沒(méi)有更多信息,我想這會(huì)對(duì)您有所幫助:


from bs4 import BeautifulSoup

import pandas as pd

html = '''<div id="mydiv">

    <table>

      <tr>

        <td>header 1</td>

        <td>value 1</td>

      </tr>

      <tr>

        <td>header 2</td>

        <td>value 2</td>

      </tr>

      <tr>

        <td>header 3</td>

        <td>value 3</td>

      </tr>

    </table>

</div>'''

num = 0

headers = []

values = []

rows = []

while True:

    soup = BeautifulSoup(html, 'html.parser')


    trs = soup.select('div#mydiv tr')

    for t in trs:

        for header, value in zip(t.select('td')[0], t.select('td')[1]):

            if num == 0:

                headers.append(header)

            values.append(value)

    rows.append(values)

    values = []

    num += 1

    if num > 50:

        break

df = pd.DataFrame(rows, columns= headers)

print(df.head())


df.to_csv('mycsv.csv')

印刷:


  header 1 header 2 header 3

0  value 1  value 2  value 3

1  value 1  value 2  value 3

2  value 1  value 2  value 3

3  value 1  value 2  value 3

4  value 1  value 2  value 3

依此類推...并將數(shù)據(jù)保存到名為mycsv.csv.

http://img1.sycdn.imooc.com//643e519e00010b3a04130652.jpg

csv 文件前 30 行

在此代碼中,我在您的示例 html 代碼上運(yùn)行了 50 次循環(huán),以生成更多的數(shù)據(jù)值。但是你需要為每一頁(yè)提出一個(gè)新的請(qǐng)求并對(duì)其進(jìn)行補(bǔ)充,但我想你明白了。這只是您如何編寫代碼的 POC。


查看完整回答
反對(duì) 回復(fù) 2023-04-18
  • 1 回答
  • 0 關(guān)注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)