csmy2012 发表于 2021-11-10 15:17

python怎么抓取“响应”中的数据呢?

想抓取新闻和报纸摘要的新闻标题,网址是:http://china.cnr.cn/news/index.html
通过工具抓到端口是:http://apppc.cnr.cn/kuaixun
这个网址直接是打不开的,报“500错误”

但是在“响应”里是能看到数据的,

这样的怎么抓取啊?
用requests.get()抓不到数据呢

请大神们教我,谢谢!

Prozacs 发表于 2021-11-10 15:32

post 。。。。看清楚哦。不是get

fanai 发表于 2021-11-10 15:34

请求方式不对 OPTIONS

楚子沦i 发表于 2021-11-10 15:48

http://china.cnr.cn/news/20211110/t20211110_525657316.shtml

随便打开一个链接,分析一下就好了啊
打开f12,然后查看network
刷新网页
一直向下翻有一个rebang的请求,是请求你说的那个端口链接。

Request URL: https://apppc.cnr.cn/rebang
Request Method: POST
Status Code: 200 OK
Remote Address: 36.150.103.19:443
Referrer Policy: strict-origin-when-cross-origin

他的请求是post。
改个请求头,然后带上ua,防盗链再请求试试。
不过其实如果你只是单单要他的数据的话,直接请求http://china.cnr.cn/news/20211110/t20211110_525657316.shtml这个链接,然后用xpath提就行了把。

UndCover 发表于 2021-11-10 15:48

这个是post请求,

wqc1234 发表于 2021-11-10 15:57

Post啊这是

ghell 发表于 2021-11-10 16:04

本帖最后由 ghell 于 2021-11-10 16:05 编辑

楼主这个需求,仅仅是抓新闻标题,直接在elements里用xpath定位就能找到,用浏览器F12仔细找一下就有,xpath=/html/body/div/div/div/div/div

如果要拿到network里的response内容,requests包是不行的,用selenium,然后分析浏览器的log,就可以了:logs = )['message']['params'] for log in browser.get_log('performance')]

或者直接用第三方增强的seleniumwire,可以直接获取request/response,原理是内置了一个proxy

xian54966 发表于 2021-11-10 16:09

你连代码都不放,怎么知道问题出在哪?

骑狗的猴子 发表于 2021-11-10 16:29

首先你要看下 请求方法其次,你要带上 UA头 等一些必要的请求头这样才能有数据返回

亿联网络 发表于 2021-11-10 16:34

```
import json

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
    "Content-Type": "application/json; charset=UTF-8"
}

data = {
    "day": "2021-11-10",
    "lastNewsId": "0",
    "pageIndex": 1,
    "perPage": 10
}
resp = requests.post(url="http://apppc.cnr.cn/kuaixun", data=json.dumps(data), headers=headers)
print(resp.text.encode("ISO-8859-1").decode("utf-8"))
```
页: [1] 2
查看完整版本: python怎么抓取“响应”中的数据呢?