V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leihongjiang
V2EX  ›  程序员

Python 爬虫 请教能实现我的这两点吗?

  •  
  •   leihongjiang · 2020-06-13 10:04:13 +08:00 · 3965 次点击
    这是一个创建于 1415 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为自己需要浏览很多的页面,工作量太大,也找不到合适类似的软件. 所以自己想写两个爬虫

    1:根据需要的网站 爬取到标题和 url 根据自己的需求浏览 2:设置关键词 搜索 全部抓取数据 然后设置爬虫判断是否展示

    如果 Python 小白 开始学习的话.需要多长的时间可以.

    43 条回复    2020-06-15 10:02:05 +08:00
    crella
        1
    crella  
       2020-06-13 10:35:21 +08:00 via Android
    先把要爬的页面和需求发出来
    TimePPT
        2
    TimePPT  
       2020-06-13 10:48:44 +08:00 via Android
    如果需求简单,小白就别爬虫了,chrome 就有采集插件
    wangfj2333
        3
    wangfj2333  
       2020-06-13 10:55:50 +08:00 via Android
    我用八爪鱼就没成功过。。
    tomczhen
        4
    tomczhen  
       2020-06-13 10:56:52 +08:00 via Android
    1. “根据自己的需求浏览” ,所以需求是什么?
    2. “全部抓取数据”,所以全部是怎么定义?
    xingshu1990
        5
    xingshu1990  
       2020-06-13 10:57:55 +08:00
    学习路线,requests (包括 get 以及 post,知道 header 哪些参数放脚本里能让爬虫爬到数据就好)
    如果目标网站没有数据加密措施,页面内容匹配需要学 re 或者 BS4 或者 XPATH 或者 lxml 。
    另外还有数据保存,比如保存 txt mysql excel 等。
    somalia
        6
    somalia  
       2020-06-13 10:58:56 +08:00
    火车头怎么样
    lilydjwg
        7
    lilydjwg  
       2020-06-13 11:04:34 +08:00
    看起来需求是浏览网页时做辅助。那么,浏览器扩展它不香么?
    leihongjiang
        8
    leihongjiang  
    OP
       2020-06-13 11:19:10 +08:00
    @tomczhen 我需要看这篇文章 然后打开链接就可以了.
    全部抓取 就是抓取 搜索到的所有页面 然后设置判断
    imn1
        9
    imn1  
       2020-06-13 11:20:40 +08:00   ❤️ 1
    我知道这种需求,以前有考虑过,放弃
    实际上就是针对没有 sitemap 、没有站内搜索,或者这两方面做得不好的站点,自己按需导航
    例如 V2EX 的节点 sitemap 还过得去,但站内搜索就……

    放弃原因并不是难写,而是耗费储存空间、耗时,一个工作要么空间换时间、要么时间换空间,两者都耗费就不值得做
    而且这样爬不仅仅是一两天的事,是个常态,这样就极可能被网站 ban,得不偿失

    建议善用 Ctrl-F 或者写页内脚本,把不想看的内容 display:none,或者 highlight 想看的内容
    dsg001
        10
    dsg001  
       2020-06-13 11:25:12 +08:00
    html,css,xpath,正则,如果这些都熟,专心学下 python 一个月差不多了
    leihongjiang
        11
    leihongjiang  
    OP
       2020-06-13 11:32:25 +08:00
    @lilydjwg 有可以聚合的吗.
    leihongjiang
        12
    leihongjiang  
    OP
       2020-06-13 11:33:31 +08:00
    @imn1 如果有成品的采集 不是更方便吗
    leihongjiang
        13
    leihongjiang  
    OP
       2020-06-13 11:33:44 +08:00
    @TimePPT 给推荐下
    leihongjiang
        14
    leihongjiang  
    OP
       2020-06-13 11:34:03 +08:00
    @wangfj2333 八爪鱼能抓取 跳转后的链接吗
    leihongjiang
        15
    leihongjiang  
    OP
       2020-06-13 11:34:39 +08:00
    @somalia 火车头需要单击点开 某个任务 才能查看到数据
    leihongjiang
        16
    leihongjiang  
    OP
       2020-06-13 11:35:41 +08:00
    @dsg001 如果我只抓取 10 个网站的 首页更新的文章 有什么好的办法吗.毕竟一个月太长了
    lilydjwg
        17
    lilydjwg  
       2020-06-13 11:36:31 +08:00
    @leihongjiang #11 我的意思是你自己按你的需求写。
    dsg001
        18
    dsg001  
       2020-06-13 12:48:26 +08:00
    @leihongjiang 外包?或者把需求写清楚,偶尔有大手子顺手就写了
    falcon05
        19
    falcon05  
       2020-06-13 12:56:05 +08:00 via iPhone
    挺简单,小白也很容易,一周应该能搞搞定了吧,就模拟请求,读写文件,字符串处理,如果有 RSS feed,就更简单了。
    Junn
        20
    Junn  
       2020-06-13 13:27:42 +08:00
    PY 爬虫的实例教程看一两个,然后 PY 基本语法什么教程看一遍,1 ~ 2 天吧
    看 HTML 、CSS 、正则等等相关教程,1 天吧
    参考教程、文档、根据自己需求开始干,1 ~ 2 天吧

    总体努力的话 1 周可以了~
    tlday
        21
    tlday  
       2020-06-13 14:22:00 +08:00
    @falcon05 并不是每个网站都有 RSS feed,也不是每个网站的 sitemap 都健全,还有一些 SPA 单页应用的网站链接和内容是动态 js 渲染的,对于一些搜索功能很差甚至没有搜索功能的网站,这个需求约等于抓取整个网站的内容。所以你需要知道以怎样的方式才能找齐“整站所有内容”,上面 @imn1 的回复才是针对需求了解的比较清楚的。楼主不给具体的网站,说很简单很容易有点太武断了。
    falcon05
        22
    falcon05  
       2020-06-13 15:55:15 +08:00 via iPhone
    @tlday 内容格式只是一个小方面,没有说 rss 是必需的啊,楼主是只看首页的更新文章,有 RSS 就弄个 RSS/xml 解析器,有 json 接口的就解析 json,即便都没有只有 html,就找个 html 解析器,也不是很大的问题,beautifulsoup 的教程烂大街。我并没有说正则,因为楼主说自己是小白。
    xiaozizayang
        23
    xiaozizayang  
       2020-06-13 16:46:50 +08:00
    到宣传自己开源项目的时候了🐒: https://github.com/howie6879/ruia

    说正事,楼主花个几百块让大学生写事情就搞定了~~
    hbolive
        24
    hbolive  
       2020-06-13 16:50:44 +08:00
    感觉就是个定制版的百度搜索,输入关键字,然后设置些条件(比如我设置不显示 csdn 的),符合的就显示。。
    myCupOfTea
        25
    myCupOfTea  
       2020-06-13 16:51:37 +08:00
    用 scrapy 太简单了,几行代码就完事了
    xingshu1990
        26
    xingshu1990  
       2020-06-13 17:12:22 +08:00
    @myCupOfTea scrapy 的学习成本 比我在 5 楼里说的还高,scrapy 的安装就比较困难,更别说后面的启动命令。
    leihongjiang
        27
    leihongjiang  
    OP
       2020-06-13 17:35:19 +08:00
    我怎么感觉应该不难啊 估计我没把我的要求表达清楚
    页面 1-10 每个页面设置 单独的 xpath 定位 获得 title 和 rul 的值
    然后 10 个页面爬取到的数据 按照时间倒序显示 显示爬取的时间
    然后设定多久爬取的时间 然后输入到某个地方

    例如:网站 A 更新了新的文章 然后我就可以看到 B 更新了文章 我可以看到.
    lithbitren
        28
    lithbitren  
       2020-06-13 18:04:29 +08:00
    对于入门来说,这种一般都坑在数据持久化吧,爬虫部分一般几行就能解决,html 看不懂都可以
    hgjian
        29
    hgjian  
       2020-06-13 18:13:50 +08:00 via Android
    nodejs+puppeteer
    Cy086
        30
    Cy086  
       2020-06-13 19:07:15 +08:00
    @myCupOfTea 如果有反爬呢
    Cy086
        31
    Cy086  
       2020-06-13 19:09:15 +08:00
    不如发一个网址出来, 大家瞅瞅好不好爬, 是否有反爬措施再给你推荐思路
    winnerczwx
        32
    winnerczwx  
       2020-06-13 19:32:01 +08:00 via iPhone
    @xingshu1990 感觉你用错方法了,scrapy 安装不是一句 pip 就行了吗?熟悉框架后新建一个项目也就 5 分钟左右全部配置好,可以开始写业务了。启动爬虫也就是一句代码的事。至于学习成本,我感觉它的文档做的还不错,比较齐全
    icegaze
        33
    icegaze  
       2020-06-13 20:11:58 +08:00 via Android
    二十年前我用的是 telportpro
    完全满足抓取网站网页的需求,,,^_^
    leihongjiang
        34
    leihongjiang  
    OP
       2020-06-13 20:51:29 +08:00
    justin2018
        35
    justin2018  
       2020-06-13 21:47:13 +08:00
    http://www.locoy.com/ 火车头~ 快速 满足楼主需求 还不用学习 python
    crella
        36
    crella  
       2020-06-13 23:36:04 +08:00
    我写的 ruby 脚本,数据以 data.json 存在文件夹里。
    页面解析的大概流程:打开“开发人员工具”,切换到 Network 标签,选中 XHR,点击页面上的”加载更多“按钮,看到加载的请求如图: https://sm.ms/image/hGYR8yJce4WXL7a
    多点几次,发现访问的页面形式是 https://www.aidiyu.com/wangzhan/page/页面序号(数字),选择其中一页进行分析。

    接下来 xpath 的分析直接参考代码中的实现。先按 xpath:<article id="post-ID" ...>来选择项目,再分析每个项目的值。

    代码: https://gitee.com/crella/codes/guori0c8dh9s6myz32b5n96

    @leihongjiang

    python 对应用 lxml 或者 beautifulsoup,写的 xpath 与 ruby 的 Nokogiri 的形式可能有不同。
    crella
        37
    crella  
       2020-06-13 23:39:42 +08:00
    gitee 又抽风了?我设置代码的权限为”公开“的。
    代码换个地址: https://gitee.com/crella/rubycode/blob/master/aidiyu.rb
    myCupOfTea
        38
    myCupOfTea  
       2020-06-14 21:40:05 +08:00
    @Cy086 scrapy 只支持中间件,加个代理就行了,反正确实挺简单的
    myCupOfTea
        39
    myCupOfTea  
       2020-06-14 21:40:42 +08:00
    @xingshu1990 scrapy 安装也难吗?直接用 conda 啊
    myCupOfTea
        40
    myCupOfTea  
       2020-06-14 21:41:17 +08:00
    @Cy086 多了个只
    myCupOfTea
        41
    myCupOfTea  
       2020-06-14 21:42:05 +08:00
    @xingshu1990 主要 scrapy 还有个 shell,可以很方便新手测试
    xingshu1990
        42
    xingshu1990  
       2020-06-15 09:06:10 +08:00
    @myCupOfTea 楼主要是会看文档就能上手 scrapy,就不会过来问问题了。
    如果不考虑 linux 还是 windown,当然是 anaconda 就好了,如果是 windown,还要看是 7 还是 10 以及里面的关联库的版本,windown 经常是不能正确安装 pypiwin32 或者 ssl 版本有问题,或者是 lxml 安装报错之类的问题,对于初学者来说学习成本会很大。
    myCupOfTea
        43
    myCupOfTea  
       2020-06-15 10:02:05 +08:00
    @xingshu1990 俺有次没用 anaconda,自己安装确实坑特别多,搞了半天最后说我 openssl 有问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5435 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 09:00 · PVG 17:00 · LAX 02:00 · JFK 05:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.