python3 请求网页时得到空的json里面的data数据为空,加了headers,为什么还会这样,求大佬指点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3 请求网页时得到空的json里面的data数据为空,加了headers,为什么还会这样,求大佬指点相关的知识,希望对你有一定的参考价值。

首先,能否说下你要爬取的网址。
其次,如果不方便,根据你的描述,该网站是不是有反扒机制,比如验证码等,虽然你在爬取时加入了headers。
最后,还有一个就是你通过抓包看下,json里面是否有数据,

建议
程序的定位点,要注意一下,建议使用lxml的xpath

希望能帮到你。。。。。。追问

可以的老哥

https://api.zhihu.com/lives/homefeed?limit=10&offset=20&includes=live

就是要爬取知乎官网的live界面的每个live的url

参考技术A header里的参数设置,伪装报头。让网站无法识别这是通过机器登陆访问的爬虫。追问

设置了啊,这是一个api,请问有什么办法可以访问到吗

为啥我用这些代码得到一个空的 Tableview? JSON

【中文标题】为啥我用这些代码得到一个空的 Tableview? JSON【英文标题】:Why do i get a empty Tableview with these code? JSON为什么我用这些代码得到一个空的 Tableview? JSON 【发布时间】:2016-10-14 18:22:50 【问题描述】:

我在将数据加载到我的 tableview 时遇到了一些问题。数据似乎没有正确加载。我刚刚开始IOS编程,并且已经在这个问题上停留了一段时间。

Here is a screenshot of my storyboard

override func viewDidLoad() 
    super.viewDidLoad()


var afspraken = [Afspraak]()

func loadJsonData()

    let url = URL(string: "https://i342444.venus.fhict.nl/")
    let dataTask = URLSession.shared.dataTask(with: url!)
    
        (data, response, error)
        in
        if error != nil
        
            print (error)
        
        else
        
            do
            
                let jsonObject = try JSONSerialization.jsonObject(with: data!, options: .allowFragments)
                self.parseJsonData(jsonObject as! Array<AnyObject>)
                print(data)
            
            catch let error as NSError print("Error parsing JSON: \(error)" )
        
    

    dataTask.resume()


func parseJsonData(_ jsonObject: Array<AnyObject>) 
    for item in jsonObject
    
        let afspraak =
            Afspraak(naam: item["naam"] as! String
                ,   adres: item["adres"] as! String
                ,   postcode: item["postcode"] as! String
                ,   woonplaats: item["woonplaats"] as! String
                ,   telefoonnummer: item["telefoonnummer"] as! String
                ,   email: item["email"] as! String
                ,   datum: item["datum"] as! Date
                ,   tijdstip: item["tijdstip"] as! String
                ,   omschrijving: item["omschrijving"] as! String)


        afspraken.append(afspraak)
    
    self.tableView.reloadData()


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return afspraken.count 


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

    let Cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
    let currentRow = indexPath.row
    let currentAfspraak = self.afspraken[currentRow]
    Cell.textLabel?.text = currentAfspraak.naam
    return Cell

【问题讨论】:

【参考方案1】:

一个 URLDataTask 请求正在后台线程(非 UI 线程)中运行。因此,您需要在完成后使用 GCD-Grand Central Dispatch 更新主线程上的 UI。

DispatchQueue.main.sync 
    self.tableView.reloadData()

编辑

我查看了您的 JSON URL,它不是 JSON 文件,而是 HTML 文件。这就是JSONSerialization 返回无效的原因。您需要将 .json 文件放到您的服务器上,而不是将 json 字符串嵌入到 HTML 文件中。

你服务器上的文件是这样的:

如您所见,这是一个 HTML。

正确的 JSON 文件应该是这样的:

请注意图片上方两个网址的区别,正确的是.json,而你的只是/,是一个目录。

因此,您需要做的就是将您的 JSON 文件上传到您的服务器,并使用相应的 URL,例如 https://i342444.venus.fhict.nl/coolName.json

【讨论】:

没错,这是我仍然需要添加的内容。但问题似乎在于加载 JSON 数据。我的数组在运行代码时仍然是空的,所以我怀疑那里出了点问题。 @DennisvdEijnde 请查看我编辑的答案,您的网址有问题。

以上是关于python3 请求网页时得到空的json里面的data数据为空,加了headers,为什么还会这样,求大佬指点的主要内容,如果未能解决你的问题,请参考以下文章

为啥我用这些代码得到一个空的 Tableview? JSON

java中,我在后台action中设置了session的值,webservice中得到session,但是里面是空的。

python和ajax和json

Elasticsearch 返回空的 json 对象

在网页实现简单的Python3代码的运行

分析Ajax请求并抓取今日头条街拍美图