44
回答
高手问答第 202 期 —— 想要玩转 Python?不妨从 Python 网络爬虫开始

OSCHINA 本期高手问答(2018 年 6 月 20 日 — 6 月 26 日)我们邀请到了黄永祥@XyHJw 和大家一起讨论关于 Python 爬虫的问题。

黄永祥,信息管理与信息系统专业学士,曾从事过系统开发和自动化开发,精通 B/S 和 C/S 自动化测试技术,多年网络爬虫开发经验,对反爬虫机制有独到的见解,精通 Flask、Django 等 Web 框架并有丰富的网站开发经验。曾就职于广州易点科技有限公司,担任 Python 开发工程师,目前就职于广东数据集成有限公司。热爱分享和新技术的探索。

随着大数据和人工智能的普及, Python 的地位也变得水涨船高,许多技术人员投身于 Python 开发,其中网络爬虫是 Python 最为热门的应用领域之一。在爬虫领域, Python 可以说是处于霸主地位,Python 能解决爬虫开发过程中所遇到的难题,而且开发速度快且支持异步编程,大大缩短了开发周期和提高数据爬取效率。因此,本期高手问答邀请了黄永祥@XyHJw 和大家一起就关于 Python 爬虫的问题进行讨论。

本期高手问答内容

1.爬虫开发的基础知识
2.爬虫开发实战分享
3.爬虫相关的优秀开源项目推荐
4.自动化测试技术

或有其他相关问题,也欢迎大家积极提问!

为了鼓励踊跃提问,@局长 会在问答结束后从提问者中抽取 5 名幸运会员赠予《玩转Python网络爬虫》一书。

购买链接:天猫

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就 Python 爬虫方面的问题向黄永祥@XyHJw 提问,请直接回帖提问。

举报
局长
发帖于3个月前 44回/5K+阅
共有44个答案 最后回答: 2个月前

@XyHJw 您好,如同黑客一样,有爬虫就会有反爬虫,像我们这样提供公共服务的公司,最怕有恶意的爬虫,频繁的访问会降低网页加载速度,影响真实用户的访问体验。站在爬虫的角度,如何反爬,不知道您的书中有没有介绍?或者给出一些反恶意爬虫的一些建议?多谢!

--- 共有 2 条评论 ---
Tkks 回复 @XyHJw : 现在更多的是前端爬啊, puppeteer 这种的 3个月前 回复
XyHJw爬虫和反爬两者就像两兄弟一样,不管反爬做得如何,总会被破解,我在书中讲过一句话,程序员都是相互伤害的。个人认为最好的反爬是将数据使用js混淆加密处理,这个反爬破解起来相对考验开发者的技术水平。当然这是治标不治本,最根本的方法是提高网站的负载量和并发量。 3个月前 回复

@XyHJw @XyHJw 您好,对于爬虫我用过基础尝试,使用Requests库和bs库进行数据抓取,但经常拿到数据后不知道如何进行下一步处理,其中一个问题是,比如我抓取了当前的所有列表内容,一共10页,每页10条共100条数据,那么我定时每天执行一次爬虫程序,我是怎么知道当前新增的数据呢?第二次运行爬虫时数据共有105条,新增五条,那么对于这5条数据如何判定呢?这五条每条都从库中查询一下是否存在还是其他什么策略?

--- 共有 2 条评论 ---
XyHJw大多数的网站的数据都是有ID属性,具有唯一性,可以通过判断数据的ID进行判断数据是否新增。而新增方式是各种各样,这个需要结合网站设计进行分析。大多数新增方式都是将新增数据排在第一页,当遍历数据时,首先判断数据ID是否已入库,若已入库可中断遍历,否则入库处理。 3个月前 回复
XyHJw你好,关于你的问题,我归纳出两个问题: 1、数据抓取后,下一步的处理都是数据入库或将数据存储在文件上,而数据的下一步如何使用,这个就属于爬虫的另一个范畴,比如用于数据分析,建模、人工智能的训练数据等等,数据的使用方式不同,从而导致数据结构有所不同,这个需要根据实际需求而定。 2、关于爬虫的新增数据。这个要分析网站的新增规则,不管新增规则如何,判断数据新增都是根据数据的唯一性进行判断,大多数的网 3个月前 回复

@XyHJw 您好,遇到个问题,在类似文章详情页,具体如招标公告的详情,我想提取某些关键信息,但是又没有什么显见的规律,且个网站HTML结构也不一致,有什么策略?请教

--- 共有 2 条评论 ---
汪飞或 回复 @XyHJw : 那样做不是很费时间吗,开发讲究的不是效率吗 1个月前 回复
XyHJw详情页出现不同网页形式,说明详情页有多种网页形式,这种情况通过分析大量的详情页,从而获取全部的网页形式。针对不同的网页形式进行特定的清洗方式。 3个月前 回复

@XyHJw 现在常用易用(容易)的爬虫库有哪些,能否推荐一下给门边的同学?最好能简单点评一下优缺点,帮忙大家避避坑。

--- 共有 1 条评论 ---
XyHJwpython最简单的爬虫库是requests和requests-html。两个库都是同一个开发者编写的。后者是今年最新发行的,在前者的基础上加入bs4等功能模块,不过只适用py3.6版本。讲到数据清洗,大多数适用bs4,该库使用简单而且强大。数据入库大多数适用mysql和mongodb,主要pymysql、mysqlclient和pymongo。这些模块都在我的书中都会详细讲述。祝你生活愉快,谢谢 3个月前 回复

@XyHJw 现在很多网站都有反爬技术,对于生产上,我们也是使用代理来解决的吗?另外,爬虫产生的海量数据,一般业界怎么解决的?

--- 共有 1 条评论 ---
XyHJw反爬虫技术有很多种,代理IP只是其中一种解决方案。要知道网站的反爬技术,需要做大量的测试才能得知。最为常见的是访问频率、请求头Referer属性、验证码、用户登录访问限制等等。而大量数据处理一般做分布式数据库。祝你生活愉快,谢谢! 3个月前 回复

@XyHJw 您好,能做到爬取一个视频网站后自动调用下载器下载么?还有如果爬取图片网站,很多图片我们知道会显示图床过期,或者显示不出来等情况,这种无效图片的去除主流方案是什么?谢谢

--- 共有 1 条评论 ---
XyHJw你好,使用浏览器下载器下载视频,可以使用selenium+phantomjs方式实现,不过这种方式就属于自动化测试技术。图片过期的方式分两种:图片链接无效或者图片变成默认图片。图片链接无效只需判断请求状态码即可,而图片变成默认图片,这个可以使用计算机视觉opencv进行判断,这部分就涉及到人工智能的范畴。祝你生活愉快,谢谢。 3个月前 回复

@XyHJw 我询问一个问题,现在网页基本上都是单页面的,用普通的requests库获取页面信息也就不全,而用selenium动态获取速度又很慢,在linux上部署又有许多坑,调试还不方便,请问这样的单页面还有别的更好方法能爬取吗?

--- 共有 1 条评论 ---
XyHJw你好,requests库获取页面信息不全,因为你所需的信息可能通过其他方式生成的,如ajax,这时候你要去访问ajax的URL。基本上requests库都能获取网页上的信息,selenium虽然能获取,但速度是太慢,因为加载的资源太多。本书会详细介绍如何使用requests爬取网页信息,可能有你需要的内容。祝你生活愉快,谢谢! 3个月前 回复

@XyHJw Python 网络爬虫哪个框架比较好用,框架对比怎么样? github上有好的项目推荐吗?

--- 共有 1 条评论 ---
XyHJwPython最常见爬虫框架Scrapy 和PySpider,其中Scrapy最热门,很多企业都是使用该框架开发爬虫。Scrapy的项目只要网上搜索一下都有很多相关资料查阅。祝你生活愉快,谢谢! 3个月前 回复

@XyHJw 你好,我们公司准备对一些项目用自动化测试,高手有没有什么好的建议,目前0积累。

--- 共有 1 条评论 ---
XyHJw你好,自动化测试分为CS和BS,BS主要有splinter和selenium库可以实现;CS主要就pywinauto和pyautogui库可以实现。 3个月前 回复
顶部