美文网首页充电宝首页投稿(暂停使用,暂停投稿)@IT·互联网
有关webscraper的问题,看这个就够了(建议收藏)

有关webscraper的问题,看这个就够了(建议收藏)

作者: 明白1 | 来源:发表于2018-02-28 16:39 被阅读3848次

    之前写过一篇「不用写代码,30 秒抓取李笑来所有微博」,链接:https://www.jianshu.com/p/bfeb13908571,介绍了如何使用webscraper抓取新浪微博,有同学在操作的过程中遇到一些问题,其中有一些常见问题,我将其总结如下,希望可以对大家有一点帮助。

    可能有朋友不知道webscraper,我再介绍一下:webscraper 一一款谷歌插件,可以方便的抓取网页上的内容:文字、链接、图片、表格等,而无需写一行代码

    webscraper有如下优点——

    1. 免费
    2. 不受操作系统限制,只要安装Chrome浏览器即可运行
    3. 操作简单,易上手。(很多没有技术背景的同学,都可以快速学会)
    4. 功能强大:不仅可以抓静态网页,对于js动态加载的数据,也很容易抓取

    根据已经测试的经历,下列类型网站均可抓取——

    1. 58同城、大众点评、美团、链家等
    2. 微信公众号、简书、知乎、博客等
    3. 淘宝、阿里巴巴、网易严选等

    可以在浏览器查看到的数据,95%均可抓取。

    你可能会问,那剩下的5%是什么呢?—— 等你遇到再说吧,如果遇不到,那对你来说,就是100%了[微笑]


    一、常见问题

    1、下载了webscraper安装包,但是无法安装,怎么办?

    如果你无法科学上网,可以从链接: https://pan.baidu.com/s/1eTn8up8 密码: jpqy下载webscraper安装包。

    下载好以后,将此安装包,拖到chrome://extensions/页面,按照提示安装即可。

    提示:!!下载好的安装包,不能直接双击安装

    2、webscraper安装好后,打开没有看到工作界面,怎么办?

    有的同学,webscraper安装成功,然后在浏览器点击 “右键” ----> “检查”后,出现如下界面。

    红框处,没有出现webscraper的入口。

    解决方案:将开发者工具,调试成 底部 模式,操作步骤如下图——

    调成“底部”模式后,就正常了,如下图——


    3、第一个例子,抓取知乎张佳玮的文章列表,为什么结果顺序和网站不一样?

    webscraper抓取数据的结果,默认是无序。若是想要结果变的有序,需要安装CouchDB,这点在第三次分享中有讲到。

    4、知乎张佳玮的文章总共有30多页,几百条数据,为什么我只抓到了20条?

    因为你抓取的是单页数据,所以只有20条。
    如何抓取多页,在第二次分享中有讲到。

    5、数据下载到本地后,用excel打开后为什么是乱码?

    这是由于你excel的编码问题,解决方案:百度“excel打开乱码”,有很多方法。

    6、我想抓取多条记录,但为什么结果只有一条?

    你没有勾选Multiple

    7、data preview的时候有多条数据,但实际为什么只抓到几条?

    你可能忘记设置 delay 了,或者需要将 delay 增大一点,这点你需要根据自己的网络状况调整一下。

    8、data preview的时候有数据,但scrape的时候却没有结果?

    3种可能情况——
    1)你选中了网页元素,但是没有点击“Done selecting",也就是没有完成最后一步,正确选中网页元素后,在Selector最右边,会出现一段「代码」,有了这段「代码」才代表选中元素完成。

    image.png
    2)选择器没选对,这个就比较复杂了,需要根据实际情况分析
    3)网站有反爬虫,所以无法实际抓取

    9、抓取图片时,开始抓取后,就不工作了,一直卡在那里

    2种可能情况——
    1)网络问题:关闭这个弹出窗口,重新抓取
    2)下载的图片数量太大,浏览器卡死、崩溃

    提示:webscraper 不适合下载大量图片;
    百度搜索图片、搜狗搜索图片都有反爬,不能下载。

    10、想选中某个元素,但一点击就会跳转,怎么解决?

    跳转问题,第三次分享有讲到。如果着急,可以自己摸索一下,点击下图这个 enable key,然后出现 spc 键,将鼠标移动到你要点击的地方,按下 s 键


    11、抓取的内容除了excel,可以导出为其他格式吗?

    不可以,webscraper暂时只支持导出excel

    12、有时候点击 create sitemap按钮没反应,怎么回事?

    这种情况一般出现在,安装并启用 CouchDB 后。

    解决方法:打开 CouchDB,重启浏览器。

    原理:创建 sitemap,本质就是将 sitemap name 和 start url 这两条数据存储到磁盘上,但现在存储不了,说明你和磁盘中间的存储过程出现问题。

    而你现在用的是 CouchDB 存储数据,说明 CouchDB 这一步有问题,而 CouchDB 数据库一般不会出问题,所以问题就是你没有打开 CouchDB,需要手动打开 CouchDB。

    CouchDB 是一个基于 js 的数据库,需要和浏览器交互,所以你需要让浏览器知道,你打开了 CouchDB,所以这时候,如果创建 sitemap 还不成功,就需要重启浏览器,让它知道,哦,现在 CouchDB 已经启动了,我可以用它了。

    13、为什么我的excel里面部分列内容和教程里的不一样?

    大家安装的 webscraper 方式不同,版本也可能不同。所以结果显示可能有所差别,但是差别肯定不会影响到真实数据。

    可能就是多了一列 web-scraper-start-url,或者少了这一列。或者其他。这些都不是大问题。

    大家自己根据实际情况,不要觉得和教程里面的结果不一样,就觉得自己的数据有问题。

    遇到不一样的地方,不要着急,先查看哪里不一样,然后分析下不同之处的意义。

    如果不同之处只是一些 “通识” 性的信息,比如 start URL、或者页码数、或者其他,而自己需要的数据抓取到了,就说明那些不同之处是软件自动附带的,可能为的是更清楚的表明数据的来源或者其他。

    14、为什么抓取完成后,什么也没有,显示“No data scraped yet”?

    最近几天,发现 webscraper 的一些细节功能发生了变化,原来是 12 月 22 日更新了新版本,有了一些新变化,具体细节如下:

    1)抓取 image 的时候,“Download image” 这个选项消失了。如图一。
    2)点击 “scrap" 以后的设置界面,原来的默认值有了变化,从 5000 变为 2000。如图二
    3)抓取完毕后,不会直接显示数据,需要点击一个”refresh“这个按钮,如图三
    4)抓取结果中,多了一列 “web-scraper-order”,暂时不清楚用途。如图四

    我暂时只发现这些变化,但是这些变化都不影响我们的数据结果。大家可以忽略。

    可能有的人的 webscraper 版本没有这些变化,那就忽略就行了。





    image.png

    15、抓取图片没有“Download image”选项,怎么办?

    之前说过 webscraper 的最新版本去除了 “Download image" 选项,也就是批量下载图片的功能,最新版本现在只能抓取图片链接。
    解决方案有 2 种——
    1、批量抓取到图片的链接,然后使用迅雷等下载工具批量下载。
    2、卸载掉最新的 webscraper,安装老版本,可以从这里下载,链接: 链接:百度网盘 请输入提取密码 密码: i7e9

    老版本依然是有”Download image" 这个选项的。

    注意不要科学上网,否则 webscraper 可能会自动更新到最新版本。

    16、安装CouchDB后,http://127.0.0.1:5984/_utils/ 为什么打不开?

    配置 couchDB 时 当在网页输入链接链接:http://127.0.0.1:5984/_utils/ 时,如果发生网页崩溃或打不开要求界面时,只需打开下载的文件 couchdb-2.1.1

    如果安装过程出现下面图片错误,说明你的系统版本和软件版本不兼容。 你需要下载 32 位的版本, 链接:链接:百度网盘 请输入提取密码 密码: apet 下载安装成功后,需要打开 CouchDB 软件。 嗯,是的软件安装好,还要 “打开”。之前遇到很多朋友,没有打开 CouchDB。之后访问链接:链接:http://127.0.0.1:5984/_utils/ 才会正常。

    17、数据抓取下来了,但是错位,怎么回事?

    数据错位,是因为你没有创建子选择器。
    你应该新建一个Element作为父选择器,把要抓取的信息,作为子选择器。这样抓取的信息就不会错位。

    二、抓取网站的思路

    1、如果要抓取的数据有多页,我该用哪个分页方式?

    抓取多页数据,翻页方式按照以下优先级:
    1)规律分页:首先分析url是否规律
    如果有规律——使用规律分页
    如果没有规律,看第2条——

    2)如果是js动态加载,继续分析是哪一种:
    如果是「下拉加载更多」方式,则使用Element scroll down。
    如果是「点击加载更多」方式,则使用Element click,Click type选择「click more」,Click element uniqueness选择「unique CSS Selector」。
    其余情况看第3条——

    3)如果点击翻页按钮时,网页的 url没有变化,或者 url只有#后面的部分发生变化,比如:https://weibo.com/5745019302/DCC6EAQdO?type=comment#_rnd1519785953991
    那么这时候,使用Element click,Click type选择「click once」,Click element uniqueness选择「unique Text」。

    4)如果以上方式都不属于你遇到的翻页方式,则使用最后一种「循环翻页」,适用类型:页面的翻页按钮本身就是一个url,这个url指向按钮所示的那页

    具体原理及方法在第三次分享里有讲到。

    我也总结了一个sitemap,大家可以复用一下:

    分享一个抓取百度搜索关键字,所有结果的标题和详情页链接的 sitemap。 嗯,是所有页面,你搜到多少页,就抓多少页。这是个无限循环的抓取。 不过有个小 bug,就是他会在最后两页的时候,来回重复抓。也就是前面所有页抓完后,重复的抓最后两页,建议你到最后的时候,手动中断程序,然后导出数据。
    '''
    {"_id":"baidu","startUrl":" 链接:https://www.baidu.com/s?wd=%E6%AF%94%E7%89%B9%E5%B8%81&pn=0&oq=%E6%AF%94%E7%89%B9%E5%B8%81&tn=baiduhome_pg&ie=utf-8&usm=3&rsv_idx=2&rsv_pq=c789a61d0005f45c&rsv_t=1cd9H90S6andIWLAmJXh9Q7QV8IK940mPN%2B7Fyi4G6aHwXrxXQOwM%2Bns3%2FGsE4oUOjlH","selectors":[{"parentSelectors":["_root","pagination"],"type":"SelectorElement","multiple":true,"id":"total","selector":"h3.t a","delay":"2000"},{"parentSelectors":["total"],"type":"SelectorText","multiple":false,"id":"title","selector":"parent","regex":"","delay":""},{"parentSelectors":["total"],"type":"SelectorLink","multiple":false,"id":"detail","selector":"parent","delay":""},{"parentSelectors":["_root","pagination"],"type":"SelectorLink","multiple":true,"id":"pagination","selector":"div#page a","delay":"2000"}]}
    '''
    如何应用到自己想要搜索的目标呢? 很简单,直接百度搜索关键字,将第一页的 url 作为 start url 替换掉我的即可。

    2、选择器可以联合使用吗?

    可以,而且一般情况下,经常需要多个选择器一起使用,才能达到更好的效果。

    两种方式——

    串联

    比如

    • Element ——> Text(link)(Element)
    • Element scroll down ——> Text(link)(Element)
    • Element click ——> Text(link)(Element)

    并联

    Element Click 和 Element scroll down

    下面是案例: 抓取简书首页所有文章标题(当然你也可以抓链接,抓评论数,点赞数,我只是选一个简单的说明一下方法)。

    目标网站:链接:简书 - 创作你的创作

    先说说这个网站抓取的难点:
    1、进入网站后,会显示一部分文章。
    2、如果需要查看更多文章,则需要向下滑动鼠标。
    3、滑动鼠标显示更多文章后,会出现一个 “阅读更多” 的按钮。如图 1. 这时候滑动鼠标就没用了,需要点击 “阅读更多” 按钮才能查看更多文章。

    再说说用 webscraper 抓取的方法: Element scroll down + Element Click + Text 。

    可以看到,抓取这个网站的标题,需要套用多个选择器。而且其中有两个配置项较多的 Element 选择器。

    下面是 sitemap(两个 3 引号之间):
    '''
    {"_id":"aaa","startUrl":[" 链接:简书 - 创作你的创作],"selectors":[{"id":"aaa","type":"SelectorElementScroll","selector":"a.title","parentSelectors":["_root"],"multiple":true,"delay":"5000"},{"id":"ccc","type":"SelectorElementClick","selector":"a.title","parentSelectors":["_root"],"multiple":true,"delay":"5000","clickElementSelector":"a.load-more","clickType":"clickMore","discardInitialElements":false,"clickElementUniquenessType":"uniqueCSSSelector"},{"id":"fff","type":"SelectorText","selector":"parent","parentSelectors":["ccc"],"multiple":false,"regex":"","delay":0}]}
    '''
    selector 树如图二。
    aaa:Element scroll down
    bbb:Element Click
    ccc:Text

    大家从 selector 树可以看到,aaa 是个 Element 选择器,但是却没有子选择器。 是的,这里是这个案例的一个特殊的地方。Element scroll down(aaa)选择器不是为了抓取数据,而是为了辅助显示数据。因为这个网站一开始需要 “滑动鼠标” 才能显示更多。

    真正抓取数据的是 Element Click(bbb) 选择器下的 ccc 选择器。

    这里的 aaa 和 bbb 是并列的,因为测试中发现,Element Click 和 Element scroll down 串联的话,始终无法抓取到数据,因为这两个选择器串联的话,哪个在前,哪个在后,该选多大区域,实在不好选。大家可以下去试试。


    总结,以后遇到这类网站:需要加载更多,和 “点击加载更多” 两种结合的网站。可以使用这种方法。

    使用 Element scroll down 辅助显示数据,不创建子选择器。
    使用 Element Click 抓取数据,建立 Text 或者选择器。


    以上,就是一些经常遇到的问题,如果大家还有什么疑惑,可以留言,我会逐一回答。如果问题比较典型,我会单独整理成文,发布出来。

    相关文章

      网友评论

      • 5763e615de06:windows版微信,没办法获取公众号历史文章列表,把手机版的链接发到电脑也不行:cry:
        明白1:@大睡虫 微信版本不对,看这个https://v.yojiang.cn/lv/p/5096?tc=5096-79f01b81-7280
      • 广州美食摄影杨大文:明白,是否加入知识星球可以免费学99那个课程呢?
        明白1:嗯,对的
      • c63a7c7e3cff:我翻了你之前的大作,没有找到关于web scraper 和CouchDB配合使用的介绍。能不能回复下具体是哪篇
        明白1:https://shimo.im/doc/45cyX1d4n3UFdckD
      • 71c1652cd132:有些网页只能模拟手机浏览器才能打开,但在此模式下不能选择爬取数据的区域,有解决方法吗?
        71c1652cd132:@明白1 这两个网址的内容不一样,许多关键信息在网页版没有
        明白1:@梁杰_5293 美团外卖有网页版 http://waimai.meituan.com/
        明白1:有,比较难
      • 719972146348:请问,在用webscraper抓取大点网站的时候爬虫好像被禁了,这要怎么办呢?是否可以修改cookie?
        明白1:@花落知千秋 淘宝买个切换ip的软件
      • 代十五:14、为什么抓取完成后,什么也没有,显示“No data scraped yet”?
        针对这个问题,在练习知乎的爬虫。点击了refresh还是不行。但是在选择数据预览的时候却能够预览到。请问大神这是什么原因呢?
        明白1:文章有讲怎么分析问题,我不清楚具体操作步骤,无法判断
      • 423e8368b560:您好,我在使用web scraper爬取知乎的时候,想要实现爬取用户关注问题列表以及问题涉及的话题,这就需要先进入问题的链接,爬取话题后再返回列表进行下一个爬取,也就是需要爬取子网页,请问该如何解决。
        明白1:加一个link选择器,link选择器指向子页面。link选择器下建一个子选择器来抓取子页面的内容。就能自动的跳到子网页了。
      • 05d1dcfcef51:遇到了某些网页element scroll down无效,只能抓一页,真是太奇怪了
        明白1:@fel835 知识星球有反爬虫
        05d1dcfcef51:@明白1 举个例子,知识星球网页版的精华就是这种情况,无法下啦加载更多,只能抓第一页
        明白1:@fel835 2种情况:
        1、你的delay设置太短
        2、可能这个网页不止scroll down,还有点击加载更多结合,你没有注意看
      • 澹台傲丝:请问运行webscraper如何终止?另外爬取的时候经常字段数据不完整,有的有,有的为空,我delay都设置了5000,能否帮忙解答下,谢谢
        明白1:如果要终止的话,直接将弹出的抓取窗口关闭掉。但是要注意,webscraper不一定能将已经抓到的数据保存下来,这点要视情况而定。

        数据不完整,有的为空,有的有,我猜你应该用的是没有用Element,所以字段错开了,让你以为是空。
      • 0aadbef88f89:抓取今日头条数据的时候, 用的element scroll down,但是模拟抓取的发现,小窗口实际只下拉了一页就停止抓取了。请问这个是神马原因
        明白1:@helloboss delay
      • WendyyGao:求大神解答:在抓取网站在线课程价格时,有的价格是正常价格,有的显示是免费,有的是在原价的位置置灰同时在旁边显示打折的价格,抓取到的数据受第一条影响,如果第一条是免费,后面的课程价格都是抓不到的,该怎么解决呢?谢谢
        明白1:这个很正常,程序员一般会将同一类型的信息,编写同一类型的 html 代码。按你说的,应该是,正常价格是一种类型,免费是一种类型,打折又是一种类型。但是这三种类型还有一个父类型,都是价格,你试试先点击正常价格,再点击免费的,再点击打折的。直到所有的都被选中。

        如果不能都选中,说明程序员没有给三个类型一个父类型,那就只能一个类型一个类型抓了。抓三次。

        不过一般都有的,没有的话,只能说这个网站的前端程序员不合格。

        Ps: 你先试试,有问题加我微信 mingbai62
        明白1:没有看到具体网页,我也不能打包票。
      • 明白1:下面是一个免费的webscraper知识星球,里面有其他一些更详细的操作,比如sitemap等,还有其他朋友操作过程中的一些例子。大家有兴趣可以加入看看
        https://t.zsxq.com/vzzVrne
        Liina:麻烦通过一下公式

      本文标题:有关webscraper的问题,看这个就够了(建议收藏)

      本文链接:https://www.haomeiwen.com/subject/rffyxftx.html