0

0

最近使用python写了爬虫,感觉体验非常不好,请教各位?

php中文网

php中文网

发布时间:2016-06-06 16:24:16

|

2170人浏览过

|

来源于php中文网

原创

最近用python写了爬虫,一开始用的3.4,好不容易写完了,但在运行时时常会停止工作,在减少了线程数(16->8)后,稳定性有所提升,但依旧偶尔存在停止工作的问题。因此换了python3.5,发现有些包不支持3.5,于是听从建议换到了最流行的2.7版本,结果sqlite3包无故报错。
DatabaseError: malformed database schema (is_transient) - near "where": syntax error
在sql语句中根本没有where的情况下报这样的错误,而原程序在python3.4下是可以成功运行的,当然3to2的差异我也改了。

最后,在放弃python之前,我想问问各位,python的优势究竟在哪里?我个人感觉语言本身有些不稳定,时常会冒出一些莫名其妙的错误。这究竟是我的问题还是python的问题。

回复内容:

个人觉得在python开发中遇到的问题在其他语言实现时一般也会遇到。解决这些问题的过程就是加深自己某方面理解的过程。

题主没找到问题根本来回换python版本,正好碰到了python的软肋,版本差别大。建议多搜搜错误信息,理解问题所在。

python的优势就如大家所说,简单明了,能很快上手,有大量资源。 我猜你是你爬虫抓的网页里含有where,你一并写到sql里了,导致的你的语句里含有where。
这种问题一般是你自己的问题。 我觉得是编程理念的问题。
编程在大部分情况下都是为了解决问题。为了炫技而做的编程其实是很少的情况。
以爬虫为例。
写爬虫、扒数据,通常都是整个大问题中的很小一部(一般是第一步),扒过来的数据作分析、做筛选、或者说做发帖机器人、哪怕只是只是简单的批量下载妹子图。整个事情的主要精力和主要“产生收益”的环境是后面的。那自然,写爬虫这件事情自然就应该是怎么快怎么来,怎么省精力怎么来。
大部分情况下,Py是做这个事情的最优选择(至少是第一次的最优选择)。所有的编译型语言你就不用想了,准确说,不提供交互式环境的语言都可以不考虑,调试代价太高。那么剩下来的还有什么呢?Python,Nodejs, Ruby。
Nodejs是的设计理念是异步,而对于爬虫这样的程序而言,异步就有点多此一举的感觉。
Ruby其实也是个不错的选择,但是有一些天生的缺陷,它的语法太“精妙”了,你在使用的时候,常常会不由自主的陷入“我可以做的更优雅一些”这样的陷阱之中,而这样优雅给你带来的收益并不啊,你的下一个爬虫的业务逻辑和你的这个爬虫和可能一点相似之处都没有。你很难做到一处优雅、处处优雅。除非你的主业是写Ruby(写ROR的不算哦),不然你会很容易陷入选择困难症之中。
反观Python,简单、粗暴、无脑干。足够简单的语法可以可以让你把主要精力放在:

最近使用python写了爬虫,感觉体验非常不好,请教各位?对面服务器怎么返回来一坨屎


最近使用python写了爬虫,感觉体验非常不好,请教各位?凭什么又屏蔽老子

最近使用python写了爬虫,感觉体验非常不好,请教各位?你就不能一次性把数据加载完

最近使用python写了爬虫,感觉体验非常不好,请教各位?你这个js函数的参数怎么能先传sign2,再传sign1呢!”【真实的故事,某著名网盘签名函数计算时,function(sign2,sign1),为此我卡了两个小时】

最近使用python写了爬虫,感觉体验非常不好,请教各位?小伙你的页面结构写的太渣了

最近使用python写了爬虫,感觉体验非常不好,请教各位?哈哈哈丫502错误了

最近使用python写了爬虫,感觉体验非常不好,请教各位?我果然是个天才”

这些重要的问题上。

当你有了这几次类似体验之后,你发现有些事情是有相似性的。你开始接触一些爬虫的框架,也积累了一些用的顺手的库,提取了一些可以复用的代码,开始有了更开阔的思路。你发现要是能够直接使用目标网站上的JS多好啊,然后开始在Py里面跑js。你发现下载连接似乎是固定的嘛,那我为什么不直接调用wget呢?老板说“你给我个应用程序啊,有界面那种”,你发现用py2exe打包命令行,c#+wpf拖个窗体程序也没那么麻烦。
这个时候你就会有“Python真是好”的感叹,喝着茶就把程序写完了。(什么,你说性能?不然你以为为什么要喝茶呢,等一下嘛。不行加钱升配置啊) 最近使用python写了爬虫,感觉体验非常不好,请教各位?
【完】 我做不出美味的饭,是不是厨具的问题? 「在运行时时常会停止工作,在减少了线程数(16->8)后,稳定性有所提升,但依旧偶尔存在停止工作的问题」

很明显这是因为你不懂多线程编程,没有对相关数据进行加锁保护导致的问题。如果你的逻辑比较复杂的话,后期 debug 这种问题非常困难。

如果你不懂得在多线程程序中时时刻刻考虑另外的线程的存在,对数据进行必要的加锁保护的话,建议你还是不要用多线程了。(如果你一定要用多线程的话,你只能用 Rust 了——在那里,没有对数据进行适当的保护的多线程程序编译通不过的。)

我写过一次多线程的爬虫,然后再也没用过多线程写爬虫了。太费心。

另外就是,请记住 Python 3.x 和 2.x 是相近的两种不同的语言,本来好好的程序换另一个出错很正常。3to2 和 2to3 只是辅助工具,不能完全解决问题的(不然也不用搞得不兼容了)。 咱们一点一点来聊:
好不容易写完了,但在运行时时常会停止工作,在减少了线程数(16->8)后,稳定性有所提升,但依旧偶尔存在停止工作的问题。
首先,爬虫属于IO密集型程序(网络IO和磁盘IO),这类程序的瓶颈大多在网络和磁盘读写的速度上,多线程在一定程度上可以加速爬虫的效率,但是这个“加速”无法超过min(出口带宽,磁盘写的速度),而且,关于Python的多线程,由于GIL的存在,实际上是有一些初学者不容易发现的坑的。

发现有些包不支持3.5
Python2和3的分裂确实比较脑残,但是据我所知,Python爬虫相关的库,大部分已经支持到了Python3.x的,不知道题主用到了什么库。当然,我是倾向于用Python2.7.x的~~~

于是听从建议换到了最流行的2.7版本,结果sqlite3包无故报错。
DatabaseError: malformed database schema (is_transient) - near "where": syntax error
在sql语句中根本没有where的情况下报这样的错误,而原程序在python3.4下是可以成功运行的,当然3to2的差异我也改了。
大大的“syntax error”已经告诉你你的SQL语句出错了~但是,对于爬虫选择数据库,考虑到爬虫数据的多变,建议题主使用NoSQL数据库,如果你暂时没有或者比较迷茫数据库选择,建议从MongoDB开始尝试。

最后,在放弃python之前,我想问问各位,python的优势究竟在哪里?我个人感觉语言本身有些不稳定,时常会冒出一些莫名其妙的错误。这究竟是我的问题还是python的问题。
这里,第一个建议是,将“python”写成“Python”,这是一个软件工程师的严谨态度。其次,Python不敢说是完美的,但是“是我的问题还是python的问题”这句话的答案应该是题主的问题,如果Python可以被一个初学者花三分钟就挑出一个致命的Bug,那么它绝不会有当下的市场。


其实Python本身是非常简单的,虽然有一些“高级”的用法,但是就算不用,一样可以快速写出实用的代码。编程设计到更多的东西是编程语言之外的东西,网络协议、设计模式、数学、算法等等,这些都是跨越编程语言但是编程会使用到的知识,也是高质量代码与低水平代码的差异所在。 很负责任地说是你的问题……因为广大人民群众久经磨练的模块+框架组合下写爬虫都没出啥问题的情况下被你玩出花儿只能说明你对爬虫或者对python中某一项对理解有比较大的问题。

优势其实是简单无脑一把抓,只要懂编码懂http懂html大概懂一点js,如果要写数据库的话稍微懂点儿数据库实在不懂也可以靠orm直接对象化操作数据库,各种轮子现成的不用重新造,各种框架齐全的细节不用操心……

有没有更方便的选择?有。目前用node写更简单,除此之外……当然,坑也更多就是了。 可以的话就上代码吧! talk is cheap, show me the code 为什么题主不去研究为什么停止工作而是去换版本?python又不是windows→_→

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

7

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

2

2026.01.21

无人机驾驶证报考 uom民用无人机综合管理平台官网
无人机驾驶证报考 uom民用无人机综合管理平台官网

无人机驾驶证(CAAC执照)报考需年满16周岁,初中以上学历,身体健康(矫正视力1.0以上,无严重疾病),且无犯罪记录。个人需通过民航局授权的训练机构报名,经理论(法规、原理)、模拟飞行、实操(GPS/姿态模式)及地面站训练后考试合格,通常15-25天拿证。

13

2026.01.21

Python多线程合集
Python多线程合集

本专题整合了Python多线程相关教程,阅读专题下面的文章了解更多详细内容。

1

2026.01.21

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

2

2026.01.21

windows激活码分享 windows一键激活教程指南
windows激活码分享 windows一键激活教程指南

Windows 10/11一键激活可以通过PowerShell脚本或KMS工具实现永久或长期激活。最推荐的简便方法是打开PowerShell(管理员),运行 irm https://get.activated.win | iex 脚本,按提示选择数字激活(选项1)。其他方法包括使用HEU KMS Activator工具进行智能激活。

2

2026.01.21

excel表格操作技巧大全 表格制作excel教程
excel表格操作技巧大全 表格制作excel教程

Excel表格操作的核心技巧在于 熟练使用快捷键、数据处理函数及视图工具,如Ctrl+C/V(复制粘贴)、Alt+=(自动求和)、条件格式、数据验证及数据透视表。掌握这些可大幅提升数据分析与办公效率,实现快速录入、查找、筛选和汇总。

6

2026.01.21

毒蘑菇显卡测试网站入口 毒蘑菇测试官网volumeshader_bm
毒蘑菇显卡测试网站入口 毒蘑菇测试官网volumeshader_bm

毒蘑菇VOLUMESHADER_BM测试网站网址为https://toolwa.com/vsbm/,该平台基于WebGL技术通过渲染高复杂度三维分形图形评估设备图形处理能力,用户可通过拖动彩色物体观察画面流畅度判断GPU与CPU协同性能;测试兼容多种设备,但中低端手机易卡顿或崩溃,高端机型可能因发热降频影响表现,桌面端需启用独立显卡并使用支持WebGL的主流浏览器以确保准确结果

10

2026.01.21

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

7

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 10.3万人学习

Django 教程
Django 教程

共28课时 | 3.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号