如何抓取网页数据(我另外一个博客中有一个 )
优采云 发布时间: 2021-09-28 12:19如何抓取网页数据(我另外一个博客中有一个
)
有一个我自己写的源代码,用于在另一个博客中抓取其他网页。调试的时候没有问题,发布一段时间后内容也没有问题,但是突然发现爬虫功能不行了。右键查看源文件,看到获取的数据是空的。
我查看了我的源代码并在服务器上调试了几次。我什至重新抓包,查看了对方的网站数据。
一开始以为是我服务器的IP被对方服务器屏蔽了,于是把源码发给另一个朋友调试,发现不是这个原因。
然后我怀疑对方是不是更新了算法,加密了程序,但是我在源码中对获取数据的模块变量做了echo输出,然后才发现获取的数据是乱码。
第一眼看到乱码,还以为是对方的开发者加密了数据,于是放弃了几天。
今天在源码中尝试对获取到的数据进行字符集转换,但是不管怎么转换,都是乱码。
找了一天,终于在C#程序员里面写了一个idea。
原来问题出在我的帖子的标题数据中。我在源代码中添加了一行'Accept-Encoding:gzip, deflate, br'。删除后问题解决,因为是gzip压缩导致的乱码。
$cars = $GLOBALS['ua'];
$header = array(
"POST {$ii} HTTP/2.0",
"Host: {$web} ",
"filename: {$id} ",
"Referer: {$ii} ",
"Content-Type: text/html",
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5,application/signed-exchange;v=b3',
'Accept-Encoding:gzip, deflate, br',
'Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Connection:keep-alive',
"Cookie: {$cars[1]}",
"User-Agent: {$cars[0]}",
"X-FORWARDED-FOR:180.149.134.142",
"CLIENT-IP:180.149.134.142",
);
echo "header: {$header[0]}
{$header[1]}
{$header[2]}
{$header[3]}
{$header[4]}
{$header[5]}
{$header[6]}
{$header[7]}
{$header[8]}
{$header[9]}
{$header[10]}
{$header[11]}
{$header[12]}
{$header[13]}
";
return $header;
通过删除以下行来解决问题。
'Accept-Encoding:gzip, deflate, br',