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