Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的刮片显示无值_Python_Datatable_Screen Scraping - Fatal编程技术网

python中的刮片显示无值

python中的刮片显示无值,python,datatable,screen-scraping,Python,Datatable,Screen Scraping,导入请求 从bs4导入BeautifulSoup作为bs 导入csv r=请求。获取('https://portal.karandaaz.com.pk/dataset/total-population/1000') 汤=bs(r.text) table=soup.find_all(class='ag-header-cell-text') 这对我来说没有任何价值。如果你知道如何从这个网站上抓取数据,我将不胜感激。你正在搜索的标签不在源代码中,这就是你不返回任何数据的原因。你有什么理由期待这一切发生

导入请求 从bs4导入BeautifulSoup作为bs 导入csv

r=请求。获取('https://portal.karandaaz.com.pk/dataset/total-population/1000') 汤=bs(r.text) table=soup.find_all(class='ag-header-cell-text')


这对我来说没有任何价值。如果你知道如何从这个网站上抓取数据,我将不胜感激。

你正在搜索的标签不在源代码中,这就是你不返回任何数据的原因。你有什么理由期待这一切发生吗?您在浏览器中看到的源代码可能与使用请求库提取源代码时看到的源代码不同

您可以通过以下方式查看正在提取的代码:

    import requests
    from bs4 import BeautifulSoup as bs
    import csv

    r = requests.get('https://portal.karandaaz.com.pk/dataset/total-population/1000')
    soup = bs(r.text, "lxml")
    print( soup )

BeautifulSoup只能看到在最初请求资源时直接烘焙到该资源HTML中的内容。您试图获取的内容不会烘焙到页面中,因为通常,当您在浏览器中查看此特定页面时,DOM是使用JavaScript异步填充的。幸运的是,记录浏览器的网络流量会显示对RESTAPI的请求,该API将表的内容作为JSON提供。以下脚本向该API发出HTTP GET请求,给定所需的
“dataset_id”
(您可以根据需要更改
参数中的键值对)。然后将响应转储到CSV文件中:

def main():
    import requests
    import csv

    url = "https://portal.karandaaz.com.pk/api/table"

    params = {
        "dataset_id": "1000"
    }

    response = requests.get(url, params=params)
    response.raise_for_status()

    content = response.json()

    filename = "dataset_{}.csv".format(params["dataset_id"])

    with open(filename, "w", newline="") as file:
        fieldnames = content["data"]["columns"]

        writer = csv.DictWriter(file, fieldnames=fieldnames)
        writer.writeheader()

        for row in content["data"]["rows"]:
            writer.writerow(dict(zip(fieldnames, row)))
    
    return 0


if __name__ == "__main__":
    import sys
    sys.exit(main())

是的,我在检查代码,它给了我什么我写的代码,但你是对的,我在jupyter的代码是不同的不知道如何,我是非常新的刮仍然学习。谢天谢地,您的浏览器中正在执行一些JavaScript来生成此HTML。下面的答案提供了更多关于如何解决这个问题的信息。谢谢Paul。在我看来,你的代码非常复杂,它给了我一个错误“没有名为'env'的模块”。你知道吗?@SajjadAli很抱歉,我在粘贴代码时犯了一个错误。前两行不应该出现在那里。刷新页面并尝试我的更新代码。谢谢Paul。你救了我另一天的时间去寻找解决方案。Stackoverflow just rock我只是注册并提出问题,得到了我想要的答案。顺便问一下,你是如何发现另一个url的?它越过了我的头。@SajjadAli不客气。关于URL,你可能想看看我为另一个问题发布的帖子,有人试图搜集有关葡萄酒和葡萄园的信息。在本文中,我解释了记录浏览器网络流量需要采取的步骤,以及如何制定对API的请求。