【问题标题】:Selenium, pythons web scrapingSelenium,python 网页抓取
【发布时间】:2020-10-22 01:30:44
【问题描述】:

我正在尝试从 HTML 表中提取数据。 成功计算了行,但是当我打印时它不断重复行。 谁能告诉我代码有什么问题? 谢谢。

#counting length of row
rows = len(driver.find_elements_by_xpath('/html/body/form/fieldset/table[2]/tbody/tr/td[3]/table/tbody/tr[5]/td[2]/div/table[1]/tbody/tr[2]/td[1]/table[2]/tbody/tr'))
time.sleep(2)
print(rows)

for r in range(rows):
    value=driver.find_element_by_xpath('/html/body/form/fieldset/table[2]/tbody/tr/td[3]/table/tbody/tr[5]/td[2]/div/table[1]/tbody/tr[2]/td[1]/table[2]/tbody/tr["+str(r)+"]')
    print(value.text)


#Output:
18 #no of rows
Start of legal relation2/7/2018 #1st row
Start of legal relation2/7/2018
Start of legal relation2/7/2018
Start of legal relation2/7/2018
Start of legal relation2/7/2018
Start of legal relation2/7/2018
Start of legal relation2/7/2018
Start of legal relation2/7/2018
Start of legal relation2/7/2018
Start of legal relation2/7/2018
Start of legal relation2/7/2018
Start of legal relation2/7/2018
Start of legal relation2/7/2018
Start of legal relation2/7/2018
Start of legal relation2/7/2018
Start of legal relation2/7/2018
Start of legal relation2/7/2018
Start of legal relation2/7/2018
sample test case successfully completed

【问题讨论】:

  • 网址好吗?

标签: python html selenium-webdriver web-scraping


【解决方案1】:

如果没有您提供的 URL,很难说出原因。但是,第一个tr 元素是[1],所以我认为你的range 函数应该是range(1, rows + 1)。而且您处理此问题的方式似乎非常间接,因为您的第一个查询似乎已检索到您正在寻找的所有元素。那么为什么不只是以下呢?

elements = driver.find_elements_by_xpath('/html/body/form/fieldset/table[2]/tbody/tr/td[3]/table/tbody/tr[5]/td[2]/div/table[1]/tbody/tr[2]/td[1]/table[2]/tbody/tr')
#time.sleep(2) # what does this accomplish?
print(len(elements))

text_list = [element.text for element in elements] # list of strings

【讨论】:

  • 非常感谢您,无论您是谁。这是我第一次使用 selenium,我试图从昨天开始不断纠正错误,现在它可以从您提供的代码中运行。为什么我没有提供网址是因为它是我大学的管理系统,您需要提供学生证和密码。再次感谢
  • 那么请接受这个答案。见What should I do when someone answers my question?
  • 如果您的范围函数如您所说,您的第一个 find_element_by_xpath 将作为参数 '/html/body/form/fieldset/table[2]/tbody/tr/td[3] /table/tbody/tr[5]/td[2]/div/table[1]/tbody/tr[2]/td[1]/table[2]/tbody/tr[0]' 应该有抛出了 NoSuchElement 异常,所以我不知道你是如何得到任何结果的。
  • 您能告诉我如何将元素保存在字符串中吗?谢谢
  • 我不确定您所说的“将元素保存在字符串中”是什么意思。您对tr 元素中的文本感兴趣,而不是元素本身,对吧?这些是每个字符串。你想要一个字符串列表还是所有字符串用分隔符连接在一起?还是完全不同的东西?或者我对你想要什么的假设完全错误?
猜你喜欢
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 2013-11-13
  • 2020-11-23
  • 2019-06-30
相关资源
最近更新 更多