【问题标题】:extracting multiple data from table row in BS4从BS4中的表行中提取多个数据
【发布时间】:2020-08-01 18:06:09
【问题描述】:

在下面的代码中,我尝试使用BeautifulSoup 从表中提取http://free-proxy-list.net 的IP 地址和端口。

但是每次我得到整行都是无用的,因为我无法将 IP 地址与其端口分开。

如何将 IP 和端口分开?

这是我的代码:

        def get_proxy(self):
            response = requests.get(self.url)
            soup = bs(response.content,'html.parser')
            data_list = [tr for tr in soup.select('tr') if tr.td]

            for i in data_list:
                print(i.text)

【问题讨论】:

    标签: python html python-3.x beautifulsoup html-parsing


    【解决方案1】:

    在您的代码中, 而不是 -

    i.text 你可以使用i.getText(' ,') (或者你选择的其他分隔符,而不是,)。 这将为您提供逗号分隔的 IP 和端口。

    此外,为方便起见,您也可以将代理列表加载到数据框中。

    对您的代码进行以下更改/添加 -

    soup = bs(response.content,'html.parser')
    
    data_list = [tr for tr in soup.select('tr') if tr.td]
    
    
    data_list2 = [tr.getText(' ,') for tr in soup.select('tr') if tr.td]
    
    #for i in data_list:
          #print(i.text)
    
    df = pd.DataFrame(data_list2,columns=['proxy_list'])
    
    df_proxyList= df['proxy_list'].str.split(',', expand=True)[0:300]
    

    df_proxyList 看起来像(垃圾列很少) -

    【讨论】:

      【解决方案2】:

      试试这个。我必须添加 isnumeric() 条件以确保代码不包含来自同一网站上的另一个表的数据。

      from bs4 import BeautifulSoup as bs
      import requests
      from collections import defaultdict
      
      def get_proxy(URL):
          response = requests.get(url)
          soup = bs(response.content,'html.parser')
          mapping = defaultdict()
          for tr in soup.select('tr'):
              if len(list(tr)) == 8:
                  ip_val = str(list(tr)[0].text)
                  port_val = str(list(tr)[1].text)
                  if port_val.isnumeric():
                      mapping[ip_val] = port_val
      
      
          for items in mapping.keys():
              print("IP:",items)
              print("PORT:",mapping[items])
      
      if __name__ == '__main__': 
          url = "http://free-proxy-list.net"
          get_proxy(url)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-21
        • 1970-01-01
        • 1970-01-01
        • 2018-06-30
        • 1970-01-01
        • 2021-11-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多