【学习交流】python简易爬虫入门

谢谢,正在运行,正常可以抓2-3小时,再看

@last_idol
搭车问下,看了你对playwright的介绍,就试了试,但在打开网页时有些网站一直显示正在打开中,属于什么情况,怎么办?

发网址看看才知道。

http://www.apabi.com/jigou/

这个要登录的,没法试。

不用登录,你那儿能正常显示登录页面?我这儿就进不去登录页面。
另外playwright驱动浏览器不是不需要下载浏览器吗?换句话,有没有驱动与浏览器版本不符的问题?

可以正常显示,下载下来的网页是完整的入口。你安装了playwright的内置浏览器了吗?这是必须的,使用如下命令:

playwright install

上面的命令会下载三个浏览器,chrome/firefox/webkit,这三个任何一个下载成功就可以使用了。我代码里使用的是chrome。

下载了。打开百度什么的都没问题,就这个网页有问题,我再试试。多谢!

是这个登录界面吗?

运行了3小时,出错了:和之前的一样,卡住不动,程序也没有停止退出。

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
 1: 00007FF6D04F192F napi_wrap+119119
 2: 00007FF6D0498A26 v8::internal::OrderedHashTable<v8::internal::OrderedHashSet,1>::NextTableOffset+38102
 3: 00007FF6D0499826 node::OnFatalError+438
 4: 00007FF6D0CD671E v8::Isolate::ReportExternalAllocationLimitReached+94
 5: 00007FF6D0CBE8D1 v8::SharedArrayBuffer::Externalize+833
 6: 00007FF6D0B700AC v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1436
 7: 00007FF6D0B6BD79 v8::internal::Heap::AddRetainedMap+2761
 8: 00007FF6D0B93A6F v8::internal::Factory::NewRawTwoByteString+95
 9: 00007FF6D0AB2B26 v8::internal::TimedHistogram::Stop+52294
10: 00007FF6D0AB3BEC v8::internal::TimedHistogram::Stop+56588
11: 00007FF6D0AB2F9A v8::internal::TimedHistogram::Stop+53434
12: 00007FF6D0C4FA71 v8::internal::Builtins::builtin_handle+83297
13: 00007FF6D0C5001E v8::internal::Builtins::builtin_handle+84750
14: 00007FF6D112B9BD v8::internal::SetupIsolateDelegate::SetupHeap+547181
15: 00007FF6D10B074C v8::internal::SetupIsolateDelegate::SetupHeap+42748
16: 00007FF6D10B074C v8::internal::SetupIsolateDelegate::SetupHeap+42748
17: 00007FF6D10ADC81 v8::internal::SetupIsolateDelegate::SetupHeap+31793
18: 00007FF6D10AD86C v8::internal::SetupIsolateDelegate::SetupHeap+30748
19: 00007FF6D0BC9B63 v8::internal::Execution::CallWasm+1395
20: 00007FF6D0BC94E6 v8::internal::Execution::Call+182
21: 00007FF6D0CB4EDD v8::Function::Call+605
22: 00007FF6D051469C node::CallbackScope::~CallbackScope+1660
23: 00007FF6D0514AFC node::MakeCallback+204
24: 00007FF6D04DE4DB napi_wrap+40187
25: 00007FF6D0538F68 uv_check_init+120
26: 00007FF6D0543739 uv_run+713
27: 00007FF6D044DF01 v8::internal::RegExpMacroAssemblerX64::stack_limit_slack+8033
28: 00007FF6D04C3025 node::Start+293
29: 00007FF6D0326A9C RC4_options+340380
30: 00007FF6D11E39A8 v8::internal::SetupIsolateDelegate::SetupHeap+1300824
31: 00007FFF5FFE7034 BaseThreadInitThunk+20
32: 00007FFF61E1D0D1 RtlUserThreadStart+33

我想到一个办法,定时启动程序,每隔1小时运行一次,以防止卡死不动。
每隔1小时运行一次.py (1007 字节)
但这个程序只有在目标py程序停止的情况才有用,py函数没有停止、只是卡住不动,则不起作用。py程序不允许并行运行。
如果能修改一下,定时关闭py函数,再重新打开就可以了。
定时关闭py函数 不会写,大神有解决方法没

忘了说了,我试的是自动录制,那个登录界面闪了以下就变成如下的样子


刚才我仔细看了一下地址栏,里面有need login的字样
是不是反爬机制?

卡死有可能是没有设置超时

抓取.py (1.2 KB)

报错显示的原因是内存炸了。用这个看看,如果能跑起来,再试试。

不知道是不是反爬,我这也有这个字样。应该用开发者工具看看到底卡哪了,我这没卡看不出来。

这个跑不动,抓 一个就这样:

Timeout 30000ms exceeded.

Note: use DEBUG=pw:api environment variable to capture Playwright logs.

我感覺代碼應該沒問題,是網站反爬限制的結果。如果能加一句,如果超時反應就自動結束進程就好了,那我就可以用另一程序自動重啟了。

能不能在代码里写一句,1小时后终止任务。

zhuaqu.py (1.3 KB)

试试这个,不行再说。跑几小时就崩,不是反爬的原因,是内存没有释放导致的,issue-6319

这个我不会,python不熟悉。

好的,正在测试。。