【问题标题】:scraping select all checkbox using python使用python抓取全选复选框
【发布时间】:2021-05-25 17:53:24
【问题描述】:
import requests
from bs4 import BeautifulSoup
import pandas as pd
url =  "https://www.pivottrading.co.in/beta/tools/open-high-low-scanner.php?broker=zerodha"
page = requests.get(url)
soup = BeautifulSoup(page.text, 'lxml')
table = soup.find('table', {'class' : 'table'})
rows = table.find_all('th')

headers = []
for i in table.find_all('th'):
    title = i.text
    headers.append(title)

df = pd.DataFrame(columns = headers)
for row in table.find_all('tr')[1:]:
        data = row.find_all('td')
        row_data = [td.text.strip() for td in data]
        length = len(df)
        df.loc[length] = row_data
print(df)

我需要从网站上抓取一个表格,但它已选中每一行的所有复选框。我该怎么办。 任何帮助将不胜感激。

【问题讨论】:

  • 欢迎来到 SO!我无法理解你的问题。你到底想刮什么?什么是预期的输出? “我需要从网站上抓取一个表格,但它为每一行选中了所有复选框”这到底是什么意思?

标签: python pandas beautifulsoup


【解决方案1】:

(如果我正确理解您的问题:您想从表格的输出中删除复选框)

由于复选框是表格的第一个索引,您可以使用索引切片跳过它们。使用:[1:],意思是:“从第一个索引到最后一个”(跳过从零开始的索引)。

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = (
    "https://www.pivottrading.co.in/beta/tools/open-high-low-scanner.php?broker=zerodha"
)
page = requests.get(url)
soup = BeautifulSoup(page.text, "lxml")
table = soup.find("table", {"class": "table"})
rows = table.find_all("th")

headers = []
for i in table.find_all("th"):
    title = i.text.strip()
    headers.append(title)

rows = []

for row in table.find_all("tr")[1:]:
    data = row.find_all("td")
    rows.append(td.text.strip() for td in data[1:])

df = pd.DataFrame(rows[:-1], columns=headers[1:])

print(df)

输出:

       Scrip  P.Close     Open     High      Low LTP @ REAL LTP(NOW) Result
0  BRITANNIA  3379.10  3385.00  3447.00  3385.00    3439.50  3439.50      0
1  EICHERMOT  2551.20  2565.00  2634.00  2565.00    2625.05  2625.05      0

【讨论】:

    【解决方案2】:
    1. 您无需选中这些框即可返回所有行。

    2. 您可以使用 pandas 抓取表格并按名称删除第一列(如果需要)。

    3. 你也可以做一些整理来匹配网页。


    import pandas as pd
    
    df = pd.read_html('https://www.pivottrading.co.in/beta/tools/open-high-low-scanner.php?broker=zerodha')[0]
    df.drop(columns={'Sr.No.'}, inplace=True)
    df.iloc[-1, 0:4] = ''
    df.fillna(0, inplace=True)
    df
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      相关资源
      最近更新 更多