天津理工大学-毫米波雷达课题组 2020-02-17 22:52 采纳率: 0%
浏览 2400
已采纳

python 爬取表格 获取不到数据

我使用python爬取网页表格数据的时候使用 request.get获取不到页面内容。
爬取网址为:http://data.10jqka.com.cn/rank/cxg/board/4/field/stockcode/order/desc/page/2/ajax/1/free/1/
这是Elements
图片说明

import os
import requests
from lxml import etree
url='http://data.10jqka.com.cn/rank/cxg/board/4/field/stockcode/order/desc/page/2/ajax/1/free/1/'
#url1='http://data.10jqka.com.cn/rank/cxg/'
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36'}
res = requests.get(url, headers=headers)
res_elements = etree.HTML(res.text)
table = res_elements.xpath('/html/body/table')
print(table)
table = etree.tostring(table[0], encoding='utf-8').decode()
df = pd.read_html(table, encoding='utf-8', header=0)[0]
results = list(df.T.to_dict().values())  # 转换成列表嵌套字典的格式
df.to_csv("std.csv", index=False)

res.text 里的数据为 (不包含列表数据)

'<html><body>\n    <script type="text/javascript" src="//s.thsi.cn/js/chameleon/chameleon.min.1582008.js"></script> <script src="//s.thsi.cn/js/chameleon/chameleon.min.1582008.js" type="text/javascript"></script>\n    <script language="javascript" type="text/javascript">\n    window.location.href="http://data.10jqka.com.cn/rank/cxg/board/4/field/stockcode/order/desc/page/2/ajax/1/free/1/";\n    </script>\n    </body></html>\n'

  • 写回答

4条回答 默认 最新

  • 7*24 工作者 2020-02-18 10:24
    关注

    爬取需要在请求头里面添加Host,要不然爬取不到任何信息,另外源码是不规则的html代码,所以需要指定html解析器

    # -*- coding:utf-8 -*-
    import os
    import requests
    from lxml import etree
    import pandas as pd
    url='http://data.10jqka.com.cn/rank/cxg/board/4/field/stockcode/order/desc/page/2/ajax/1/free/1/'
    
    headers={
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36',
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
        "Host":"data.10jqka.com.cn",
    }
    res = requests.get(url, headers=headers)
    
    parser = etree.HTMLParser(encoding='utf-8')    #指定html解析器
    res_elements = etree.HTML(res.text,parser=parser)
    table = res_elements.xpath('/html/body/table')
    print(table)
    table = etree.tostring(table[0], encoding='utf-8').decode()
    df = pd.read_html(table, encoding='utf-8', header=0)[0]
    results = list(df.T.to_dict().values())  # 转换成列表嵌套字典的格式
    df.to_csv("std.csv", index=False)
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 咨询一下有关于王者荣耀赢藏战绩
  • ¥100 求购一套带接口实现实习自动签到打卡
  • ¥50 MacOS 使用虚拟机安装k8s
  • ¥500 亚马逊 COOKIE我如何才能实现 登录一个亚马逊账户 下发新 COOKIE ..我使用下发新COOKIE 导入ADS 指纹浏览器登录,我把账户密码 修改过后,原来下发新COOKIE 不会失效的方式
  • ¥20 玩游戏gpu和cpu利用率特别低,玩游戏卡顿
  • ¥25 oracle中的正则匹配
  • ¥15 关于#vscode#的问题:把软件卸载不会再出现蓝屏
  • ¥15 vimplus出现的错误
  • ¥15 usb无线网卡转typec口
  • ¥30 怎么使用AVL fire ESE软件自带的优化模式来优化设计Soot和NOx?