【问题标题】:Adding headers to a table I have scraped将标题添加到我已抓取的表中
【发布时间】:2019-06-06 12:29:28
【问题描述】:

我一直在关注一个在线教程,但我不想使用带有标题的教程数据,我想使用以下代码:

我的问题是我的表格没有标题,所以它使用第一行作为标题。如何设置“Ride”和“Queue Time”的定义标题?

谢谢

import requests
import lxml.html as lh
import pandas as pd

url='http://www.ridetimes.co.uk/'

page = requests.get(url)

doc = lh.fromstring(page.content)

tr_elements = doc.xpath('//tr')

r_elements = doc.xpath('//tr')

col=[]
i=0
#For each row, store each first element (header) and an empty list
for t in tr_elements[0]:
    i+=1
    name=t.text_content()
    print '%d:"%s"'%(i,name)
    col.append((name,[]))
    print(col)

【问题讨论】:

    标签: python web-scraping python-requests python-requests-html


    【解决方案1】:

    试试这个怎么样:

    >>> pd.DataFrame(col,columns=["Ride","Queue Time"])
                   Ride Queue Time
    0  Spinball Whizzer         []
    1            0 mins         []
    

    如果我是正确的,那么这就是答案。

    【讨论】:

      【解决方案2】:

      使用 pandas 获取表,然后只分配列名:

      import pandas as pd
      
      url='http://www.ridetimes.co.uk/'
      df = pd.read_html(url)[0]
      
      df.columns = ['Ride', 'Queue Time']
      

      输出:

      print (df)
                     Ride             Queue Time
      0  Spinball Whizzer                 0 mins
      1           Nemesis                 5 mins
      2          Oblivion                 5 mins
      3        Wicker Man                 5 mins
      4        The Smiler                10 mins
      5              Rita                20 mins
      6          TH13TEEN                25 mins
      7         Galactica  Currently Unavailable
      8        Enterprise  Currently Unavailable
      

      【讨论】:

        【解决方案3】:

        考虑使用与页面相同的源来更新返回 json 的值。您向 url 添加一个随机数以防止提供缓存的结果。这适用于所有组类型,而不仅仅是thrill

        import requests
        import random 
        import pandas as pd
        
        i = random.randint(1,1000000000000000000)
        r = requests.get('http://ridetimes.co.uk/queue-times-new.php?r=' + str(i)).json() #to prevent cached results being served
        df = pd.DataFrame([(item['ride'], item['time']) for item in r], columns = ['Ride', ' Queue Time'])
        print(df)
        

        如果你只想要thrill 组,那么修改这一行:

        df = pd.DataFrame([(item['ride'], item['time']) for item in r if item['group'] == 'Thrill'], columns = ['Ride', ' Queue Time'])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-18
          • 2019-07-06
          • 2023-01-11
          • 1970-01-01
          • 2017-04-05
          • 2021-11-15
          相关资源
          最近更新 更多