我正在使用Python请求抓取一个Wikia页面.但是有一个问题:请求请求并没有给我相同的HTML,因为我的浏览器使用相同的页面.
为了比较,这里是Firefox给我的页面,这里是页面请求提取(下载它们以查看 - 抱歉,没有简单的方法可以从另一个站点直观地托管一些HTML).
你会注意到一些差异(超级不友好的差异).有一些小东西,比如beinig以不同的顺序排序等等,但也有一些非常非常大的东西.最重要的是缺少最后六个<img>,以及整个导航和页脚部分.即使在原始HTML中,它看起来像页面突然切断.
为什么会发生这种情况,有没有办法解决它?我已经想到了很多东西,其中没有一个是富有成效的:
User-Agent到请求请求中,并且1:1,但没有任何改变.如果你知道这可能发生的方式并找到解决方法,那就太棒了.谢谢!
我想在通过管道传输(例如,文件)时将文本打印为 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.txt,test.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 …
我有一个函数应该在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位.前两个字节应该是0xAA和0x88,而那些第二奇怪的经历0xB9和0xE8 …
python ×2
apng ×1
arrays ×1
browser ×1
c ×1
casting ×1
char ×1
difference ×1
file-format ×1
png ×1
powershell ×1
utf-8 ×1