【问题标题】:How to get value of a cell in html page when click to a link in list link?单击列表链接中的链接时如何获取html页面中单元格的值?
【发布时间】:2019-09-16 15:51:43
【问题描述】:

我有一个大约 5000 个链接的列表。 Ex 2 in 5000 链接:

https://racevietnam.com/runner/buiducninh/ecopark-marathon-2019

https://racevietnam.com/runner/drtungnguyen83/ecopark-marathon-2019

...

我想获取 Time of Day 列和 Finish 行的链接值。

例如:

09:51:07 AM - https://racevietnam.com/runner/buiducninh/ecopark-marathon-2019

07:50:55 AM - https://racevietnam.com/runner/ngocsondknb/ecopark-marathon-2019

我得到了一个网站的用户信息,该网站有 id、class。但是https://racevietnam.com/runner/ngocsondknb/ecopark-marathon-2019 中的表没有id,表中的类。所以我不能。

#!/usr/bin/python
from urllib.request import urlopen
from bs4 import BeautifulSoup

list_user = []

for userID in range(1, 100000):
    link = "https://example.com/member.php?u=" + str(userID)
    html = urlopen(link)
    bsObj = BeautifulSoup(html, "lxml")
    user_name = bsObj.find("div", {"id":"main_userinfo"}).h1.get_text()
    list_user.append(user_name)
    print("username", userID, "is: ", user_name)
    with open("result.txt", "a") as myfile:
        myfile.write(user_name)

请帮帮我。

谢谢。

【问题讨论】:

    标签: arraylist web-scraping html-table hyperlink cell


    【解决方案1】:

    这是我的代码。 它工作正常。

    import requests
    from bs4 import BeautifulSoup
    
    f = open("input.ecopark","r")
    f_content = f.readlines()
    f.close()
    
    for url in f_content:
        r = requests.get(url.rstrip())
        soup = BeautifulSoup(r.text, 'html.parser')
        result = soup.select("table tbody tr td")
        x = ""
        for i in result:
            if not x:
                if i.get_text() == "Finish":
                    x = 1
                    continue
            if x:
                print(url.rstrip()+ " "+i.get_text())
                break
    

    【讨论】:

      【解决方案2】:

      使用 bs4 4.7.1。

      只有一个表,您需要最后一行的第二列 (td)。您可以使用last:child 选择最后一行;它应该与tbody类型选择器和>子组合器一起使用,以免得到标题行。您可以使用nth-of-type 指定要返回的td 单元格。

      现在您可能希望通过至少两种方式来开发它:

      1. 处理未找到的情况,例如

      name = getattr(soup.select_one('title'), 'text', 'N/A')
      timing = getattr(soup.select_one('tbody > tr:last-child td:nth-of-type(2)'), 'text', 'N/A')    
      
      1. 将项目添加到列表/数据结构中,可以在末尾作为数据帧输出并以 csv 格式输出。或者您可能希望坚持当前的方法

      Python:

      import requests
      from bs4 import BeautifulSoup as bs
      
      urls = ['https://racevietnam.com/runner/buiducninh/ecopark-marathon-2019', 'https://racevietnam.com/runner/drtungnguyen83/ecopark-marathon-2019']
      
      with requests.Session() as s:
          for url in urls:
              r = s.get(url)
              soup = bs(r.content, 'lxml')
              name = soup.select_one('title').text
              timing = soup.select_one('tbody > tr:last-child td:nth-of-type(2)').text
              print(name, timing)
      

      【讨论】:

        猜你喜欢
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-20
        • 2020-07-26
        • 1970-01-01
        相关资源
        最近更新 更多