小编obs*_*kyr的帖子

Python请求并没有给我与浏览器相同的HTML

我正在使用Python请求抓取一个Wikia页面.但是有一个问题:请求请求并没有给我相同的HTML,因为我的浏览器使用相同的页面.

为了比较,这里是Firefox给我的页面,这里是页面请求提取(下载它们以查看 - 抱歉,没有简单的方法可以从另一个站点直观地托管一些HTML).

你会注意到一些差异(超级不友好的差异).有一些小东西,比如beinig以不同的顺序排序等等,但也有一些非常非常大的东西.最重要的是缺少最后六个<img>,以及整个导航和页脚部分.即使在原始HTML中,它看起来像页面突然切断.

为什么会发生这种情况,有没有办法解决它?我已经想到了很多东西,其中没有一个是富有成效的:

  • 请求标头干扰?不,我尝试将我的浏览器发送的标题复制User-Agent到请求请求中,并且1:1,但没有任何改变.
  • 加载HTML后JavaScript加载内容?罗.即使禁用了JS,Firefox也给了我"好"的页面.
  • 呃......好吧......还有什么呢?

如果你知道这可能发生的方式并找到解决方法,那就太棒了.谢谢!

python browser python-requests

15
推荐指数
3
解决办法
1万
查看次数

APNG和MNG有什么区别?

我知道APNG是PNG的扩展,而MNG更像是自己的格式(尽管是由原始的PNG开发者开发的).MNG在任何浏览器中几乎都不受支持,而APNG几乎只在Firefox中具有本机支持(出于各种向后兼容性和解码相关的原因,似乎).

除了所有这些幕后的事情,APNG和MNG之间有什么区别?是否有一个具有另一个没有的功能(例如,只存储被修改的部分而不是总是整个框架)?一个人的性能或文件大小比另一个好吗?

png file-format apng difference

6
推荐指数
1
解决办法
1451
查看次数

在 PowerShell 中进行管道传输时,如何确保 Python 打印 UTF-8(而不是 UTF-16-LE)?

我想在通过管道传输(例如,文件)时将文本打印为 UTF-8,因此在 Windows 10 上的 Python 3.7.3 上通过 PowerShell,我这样做:

import sys

if not sys.stdout.isatty():
    sys.stdout.reconfigure(encoding='utf-8')

print("Mamma mia.")
Run Code Online (Sandbox Code Playgroud)

当 run as 时encodingtest.py > test.txttest.txt结果是这样的:

00000000  FF FE 4D 00 61 00 6D 00 6D 00 61 00 20 00 6D 00  ÿþM.a.m.m.a. .m.
00000010  69 00 61 00 2E 00 0D 00 0A 00                    i.a.......
Run Code Online (Sandbox Code Playgroud)

奇怪的是,它以 开头FF FE,它是 UTF-16-LE 的字节顺序标记——并且在字符之间打印空字节(就像 UTF-16 那样)!但是,当我通过 CMD 而不是 PowerShell 运行它时,它可以很好地打印 UTF-8。即使通过 PowerShell 进行管道传输,我如何让 Python 打印 UTF-8?

我可以运行encodingtest.py …

python powershell utf-8 character-encoding

6
推荐指数
1
解决办法
80
查看次数

C是否隐式地和奇怪地将这个char在数组中转换为int?

我有一个函数应该在char数组中插入一个short,big-endian.这就是它的样子:

unsigned short getShort(char* arr, int index)
{
    unsigned short n = 0;
    int i;
    for (i = 0; i <= 1; i++)
    {
        n <<= 8;
        n |= arr[index + i];
    }
    return n;
}
Run Code Online (Sandbox Code Playgroud)

然而,除了最不重要的字节(在这种情况下,AKA是最重要的字节)之外的所有字符都被转换为而不是按照它应该工作0xFF.如果我插入printf("%x\n", arr[index + i]);for循环的开头(以及之后的分隔符),我得到这个输出:

ffffffaa
ffffff88
---
0
8
---
0
0
---
0
0
---
...
---
ffffffb9
ffffffe8
---
0
e
---
0
e
---
...
Run Code Online (Sandbox Code Playgroud)

有些字节只是填充0xFF,最多可以为32位.前两个字节应该是0xAA0x88,而那些第二奇怪的经历0xB90xE8 …

c arrays casting char

2
推荐指数
1
解决办法
89
查看次数