Python 如何在web抓取中提取属于同一标记名的元素?

Python 如何在web抓取中提取属于同一标记名的元素?,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,所以基本上,我是想在每一页上用标签名“tr”划过那几排拖缆。在每一行中,都有多个列,我想将它们包含到我的输出中。我能够包含几乎所有这些列,但是有两个具有相同的标签名,这让我很沮丧。(关于追随者的两个专栏)我尝试了索引他们的方法,只得到奇数或偶数,但结果包含在第二张图片中,效果不好。这些数字只是不断地重复,并没有按照它应该的方式继续下去。那么,有没有办法将“获得的追随者”列正确地输入到输出中 这是我第一次在这里提问,所以我不确定这是否足够。如果需要,我很高兴稍后更新更多信息 for i in ra

所以基本上,我是想在每一页上用标签名“tr”划过那几排拖缆。在每一行中,都有多个列,我想将它们包含到我的输出中。我能够包含几乎所有这些列,但是有两个具有相同的标签名,这让我很沮丧。(关于追随者的两个专栏)我尝试了索引他们的方法,只得到奇数或偶数,但结果包含在第二张图片中,效果不好。这些数字只是不断地重复,并没有按照它应该的方式继续下去。那么,有没有办法将“获得的追随者”列正确地输入到输出中

这是我第一次在这里提问,所以我不确定这是否足够。如果需要,我很高兴稍后更新更多信息

for i in range(30):      # Number of pages plus one 
    url = "https://twitchtracker.com/channels/viewership?page={}&searchbox=Course+Name&searchbox_zip=ZIP&distance=50&price_range=0&course_type=both&has_events=0".format(i)
    headers = {'User-agent': 'Mozilla/5.0'}
    page = requests.get(url, headers=headers)
    soup = BeautifulSoup(page.content)
    
    channels = soup.find_all('tr')
    for idx, channel in enumerate(channels):
        if idx % 2 == 1:    
            idx += 1
        Name = ", ".join([p.get_text(strip=True) for p in channel.find_all('a', attrs={'style': 'color:inherit'})])
        Avg = ", ".join([p.get_text(strip=True) for p in channel.find_all('td', class_ = 'color-viewers')])
        Time = ", ".join([p.get_text(strip=True) for p in channel.find_all('td', class_ = 'color-streamed')])
        All = ", ".join([p.get_text(strip=True) for p in channel.find_all('td', class_ = 'color-viewersMax')])
        HW = ", ".join([p.get_text(strip=True) for p in channel.find_all('td', class_ = 'color-watched')])
        FG = ", ".join([soup.find_all('td', class_ = 'color-followers hidden-sm')[idx].get_text(strip=True)])
也许是另一种方法## 它使用
pandas
来阅读表格,你只需清除广告即可

我还使用了
time.sleep()
延迟循环并对服务器温和

示例

import requests, time
import pandas as pd
df_list = []
for i in range(30):      # Number of pages plus one 
    url = "https://twitchtracker.com/channels/viewership?page={}&searchbox=Course+Name&searchbox_zip=ZIP&distance=50&price_range=0&course_type=both&has_events=0".format(i)
    headers = {'User-agent': 'Mozilla/5.0'}
    page = requests.get(url, headers=headers)
    df_list.append(pd.read_html(page.text)[0])
    
    time.sleep(1.5)
    
df = pd.concat(df_list).reset_index(drop=True)
df.rename(columns={'Unnamed: 2':'Name'}, inplace=True)
df.drop(df.columns[[0,1]],axis=1,inplace=True)
df[~df.Rank.str.contains(".ads { display:")].to_csv('table.csv', mode='w', index=False)

谢谢。它实际上对我有用。看来我太喜欢靓汤了,也应该尝尝熊猫。谢谢这不是一条正确的道路,但有时会比较短或容易走。享受熊猫的乐趣