我正在尝试抓取https://www.domeinquarantaine.nl/的表,但是由于某种原因,它没有给出该表的响应
#The parameters
baseURL = "https://www.domeinquarantaine.nl/tabel.php"
PARAMS = {"qdate": "2019-04-21", "pagina": "2", "order": "karakter"}
DATA = {"qdate=2019-04-21&pagina=3&order="}
HEADERS = {"Host": "www.domeinquarantaine.nl",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0",
"Accept": "*/*",
"Accept-Language": "en-US,en;q=0.5",
"Accept-Encoding": "gzip, deflate, br",
"Referer": "https://www.domeinquarantaine.nl/",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest",
"Content-Length": "41",
"Connection": "keep-alive",
"Cookie": "_ga=GA1.2.1612813080.1548179877; PHPSESSID=5694f8e2e4f0b10e53ec2b54310c02cb; _gid=GA1.2.1715527396.1555747200"}
#POST request
r = requests.post(baseURL, headers = HEADERS, data = PARAMS)
#Checking the response
r.text
响应由奇怪的标记和问号组成
所以我的问题是为什么它返回此响应?以及如何解决该问题,最终使其最终成为刮板?
答案 0 :(得分:1)
打开网络浏览器,关闭JavaScript,您将看到requests
会得到什么。
但是在Chrome / Firefox中使用DevTools
(选项卡Network
,过滤XHR
请求),您应该看到POST请求到URL https://www.domeinquarantaine.nl/tabel.php,并且将HTML和表一起发送回去。
如果您在浏览器中打开此URL,则会看到表格-因此可以通过GET来获取事件,但使用POST则可以过滤数据。
写完此说明后,我发现您已经在代码中包含此网址-您没有在说明中提及它。
您有其他问题-您设置了
"Accept-Encoding": "gzip, deflate, br"
因此服务器发送压缩的响应,因此您应该将其解压缩。
或使用
"Accept-Encoding": "deflate"
服务器将发送未压缩的数据,您将看到带有表的HTML
答案 1 :(得分:0)
因此,您得到所得到的东西有两个原因:
可以通过更改data
和headers
变量并将requests.session()
添加到您的代码(这将自动收集并注入cookie) < / p>
所有代码中的代码应如下所示:
import requests
session = requests.session()
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:66.0) Gecko/20100101 Firefox/66.0", "Accept": "*/*", "Accept-Language": "en-US,en;q=0.5", "Accept-Encoding": "gzip, deflate", "Referer": "https://www.domeinquarantaine.nl/", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With": "XMLHttpRequest", "DNT": "1", "Connection": "close"}
data={"qdate": "2019-04-20"}
session.get("https://www.domeinquarantaine.nl", headers=headers)
r = session.post("https://www.domeinquarantaine.nl/tabel.php", headers=headers, data=data)
r.text
希望这会有所帮助!