weixin_53586410 2022-12-31 00:53 采纳率: 50%
浏览 132
已结题

入门级别python问题

import requests
from lxml import etree
import time
#为什么下面只能得到一个[]
for i in range(5,0,-1):#循环一次就是每一页的公告的标题。时间。点击量
    if (i == 0):#第一页和其他页的url规律不同所以条件语句
        url = 'http://hhxy.cqjtu.edu.cn/dwgk_ywgk.htm'
    else:
        url = 'http://hhxy.cqjtu.edu.cn/dwgk_ywgk' + str(i) + '.htm'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
    }
    response = requests.get(url, headers=headers,timeout=(2, 10)).text
    print(response)
    html = etree.HTML(response)
    print(html)
    divs = html.xpath('/html/body/div[2]/table/tbody/tr/td[1]/div/div[4]/div[3]/table/tbody/tr')
    print(divs)



    for div in divs:
        title = div.xpath("./td[2]/a/text()")[0]
        TM = div.xpath("./td[3]/span/text()")[0]
        href = div.xpath("./td[3]/span/a@href")[0]
        href2 = "http://hhxy.cqjtu.edu.cn/" + href
        # 导入这个href2,是为了去获取点击量,但是连之前的[]都没解决,哎。。。
        print(title, TM, href2)
        time.sleep(1)

        with open("河海学院.txt", "a", encoding="utf-8") as f:
            f.write("{},{},{}.format(title,TM,href2)")
            f.write("\n")


  • 写回答

8条回答 默认 最新

  • Ko-walski 2022-12-31 21:52
    关注

    1首先你的代码压根就没返回相应内容 头信息不全无法获取
    2.其次你的定位不到是最后的这个tbody(也就是最后的那个table后面那个)浏览器会对html文本进行一定的规范化,所以会自动在路径中加入tbody,导致读取失败,在此处直接在路径中去除tbody即可 所以你手动加了就找不到了
    最终你因为上面两个原因返回是空列表【】
    所以修改后的基础代码如下 仅仅获取第一页的

    
    import requests
    from lxml import html
    
    url = 'http://hhxy.cqjtu.edu.cn/dwgk_ywgk.htm'
    
    HEADER = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
            # "Cookie": "JSESSIONID=BC06B8370F297B9ADFE2C82EF2F6E331",
    
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
        }
    webpage = requests.get(url, headers=HEADER)
    tree = html.fromstring(webpage.content)
    
    text = tree.xpath('//*/div[@class="twidth"]/table/tbody/tr/td[1]/div/div[4]/div[@class="mm"]/table/tr/td/a/text()')
    for t in text:
        print(t)
    
    

    img

    定位半天不容易 给个采纳 哈哈

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 1月9日
  • 已采纳回答 1月1日
  • 赞助了问题酬金15元 12月31日
  • 创建了问题 12月31日

悬赏问题

  • ¥15 能给我一些人生建议吗
  • ¥15 mac电脑,安装charles后无法正常抓包
  • ¥18 visio打开文件一直显示文件未找到
  • ¥15 请教一下,openwrt如何让同一usb储存设备拔插后设备符号不变?
  • ¥30 使用quartz框架进行分布式任务定时调度,启动了两个实例,但是只有一个实例参与调度,另外一个实例没有参与调度,不知道是为什么?请各位帮助看一下原因!!
  • ¥50 怎么获取Ace Editor中的python代码后怎么调用Skulpt执行代码
  • ¥30 fpga基于dds生成幅值相位频率和波形可调的容易信号发生器。
  • ¥15 R语言shiny包和ncdf4包报错
  • ¥15 origin绘制有显著差异的柱状图和聚类热图
  • ¥20 simulink实现滑模控制和pid控制对比,提现前者优势