不恨晚 2023-11-17 18:43 采纳率: 50%
浏览 14
已结题

xpath定位正确但提取文本为空

xpath定位正确但提取文本为空
代码:

import time
from lxml import etree
import requests
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.webdriver import Options
from selenium import webdriver

#构造
options = Options()
options.add_argument('-start-maximized')
driver = webdriver.Edge(options=options)

#获取网页
driver.get("http://www1.xbus.cn/search1.asp")
time.sleep(1)
html = driver.page_source
html =etree.HTML(html)
Html =html
for i in range(4,34):
    time.sleep(1)
    url =html.xpath(f'/html/body/table[3]/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr[{i}]/td[2]/a/text()')[0]
    name = url
    driver.find_element(By.XPATH, f'/html/body/table[3]/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr[{i}]/td[2]/a').click()
    time.sleep(2)
    html = driver.page_source
    html = etree.HTML(html)
    time.sleep(2)
    url =html.xpath('/html/body/table[4]/tbody/tr/td[1]/table/tbody/tr[2]/td/table/tbody/tr[2]/td/p[1]/a/text()')
    print(url)

为什么为空,帮我改改代码

  • 写回答

21条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-11-17 18:44
    关注
    获得0.45元问题酬金

    引自强大而免费的微信小程序:皆我百晓生

    你的代码中有一个潜在问题。在获取网页后,你将HTML再次赋值给了变量html,但在之后的循环中,你应该使用新的html变量来提取文本。因此,你需要将html =etree.HTML(html)修改为html =etree.HTML(driver.page_source),以便在每次循环中更新HTML。

    以下是修改后的代码:

    import time
    from lxml import etree
    import requests
    from selenium.webdriver.common.by import By
    from selenium.webdriver.edge.webdriver import Options
    from selenium import webdriver
    
    #构造
    options = Options()
    options.add_argument('-start-maximized')
    driver = webdriver.Edge(options=options)
    
    #获取网页
    driver.get("http://www1.xbus.cn/search1.asp")
    time.sleep(1)
    
    for i in range(4, 34):
        time.sleep(1)
        url = driver.find_element(By.XPATH, f'/html/body/table[3]/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr[{i}]/td[2]/a').text
        driver.find_element(By.XPATH, f'/html/body/table[3]/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr[{i}]/td[2]/a').click()
        time.sleep(2)
        html = etree.HTML(driver.page_source)
        time.sleep(2)
        urls = html.xpath('/html/body/table[4]/tbody/tr/td[1]/table/tbody/tr[2]/td/table/tbody/tr[2]/td/p[1]/a/text()')
        print(urls)
    
    driver.quit()
    

    请尝试运行修改后的代码,看看是否能够正确提取文本。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月25日
  • 创建了问题 11月17日

悬赏问题

  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计
  • ¥23 (标签-bug|关键词-密码错误加密)
  • ¥66 比特币地址如何生成taproot地址
  • ¥20 数学建模数学建模需要
  • ¥15 关于#lua#的问题,请各位专家解答!