美文网首页
最精简的爬虫 --仅需4行代码(python)

最精简的爬虫 --仅需4行代码(python)

作者: 我该有多疯狂 | 来源:发表于2018-02-06 11:15 被阅读0次

    最精简的爬虫 --仅需4行代码(python)

    我该有多疯狂

    刚刚整理了下爬虫系列,于是乎就开始了第一次的技术分享

    今天,我们主要讲述的是思路,思路,思路。

    相比起,直接贴代码,思路显的更为重要

    当初,自己的坑,希望后面的人可以避免

    *********

    爬虫逻辑:

    1,请求网页(利用python向web服务器进行请求)

    2,通过匹配找到对应的目标(F12查看网页的结构)

    3,下载对应目标

    方法:(2种)

    一种是百度上陈述的传统方法,通过urllib库来请求,并且urllib.request.urlretrieve 来对目标下载

    另一种是使用简便,逻辑清晰,代码复杂度率低

    方法一:

    ^这里我们主要介绍的 一种简便的,实用的,逻辑清晰,代码量少的

    import requests #请求网页

    from bs4 import BeautifulSoup #分析html的结构

    我们主要利用到2个库:requests,bs4

    库的用法,读者请自行百度,

    tips:bs4库非内置库,需要另行安装:pip3 install beautifulsoup4

    然后,我们再对目标进行写入:

    with open('picfile','wb') as f: #这里的picfile为存放文件

    f.write(pic) #这里pic为请求到的图片对象

    ok,这样爬取到的pic就存到了picfile文件里了,这里介绍的为单目标存放,实际中都是多目标文件的,所以,接下来,我们将用到for循环进行处理:(请读者自行思考,如何加for循环)

    爬虫代码如下:

    import requests

    pic = requests.get('http://pics.sc.chinaz.com/files/pic/pic9/201801/zzpic9947.jpg')

    with open('picfile','wb') as f:

    f.write(pic.content)

    这是最简单的入门例子,实际中,是多个内容一起爬取,下一步就是增加bs4库针对网站进行过滤,然后再加for循环进行批量存储,请读者进行思考(在本文的最下方,会附上一个完整版的demo)

    ——————————————————————————————————————————————————

    方法二:

    ^现在,介绍百度上比较统一的一种方法:

    (个人觉得,晦涩难懂,对于初学者来讲,并且代码冗余)

    import urllib.request

    import re #正则匹配目标文件

    import os

    import urllib

    思路:利用urllib库进行网页的请求

    然后,再利用正则表达式得出目标文件 (这里需要注意正则的编写,需要极度精确到位)

    最后,urllib.request.urlretrieve 这个函数,将目标进行下载

    这里,再对re库进行一个补充,这是一个常用的正则匹配

    regex = re.compile()

    file.search()

    最后,来详细陈述下第一种方法的优势:

    1,requests使用简便,是再urllib基础之上产生的一个页面请求库

    2,采取bs4进行过滤,会使在过滤手段更加简洁易理解,避免复杂正则表达式所带来的困惑

    3,采用的write写针对for循环进行多文件的。

    python爬虫PythonPython 3.x

    https://zhuanlan.zhihu.com/p/33614014

    import requests

    import os,sys,time

    import bs4

    url = 'https://xkcd.com'

    os.makedirs('xkcd',exist_ok=True)

    #re = requests.get('https://xkcd.com')

    #status = re.status_code()

    while not url.endswith('#'):

    print('downing the %s...' %url)

    re = requests.get('https://xkcd.com')

    re.raise_for_status()

    soup = bs4.BeautifulSoup(re.text)

    comicElen = soup.select('#comic img')

    print(type(comicElen))

    #print(comicElen)

    if comicElen == []:

      print('not find pic')

    else:

      # print('2')

      comicUrl = comicElen[0].get('src')

      comicUrl = 'https:' + comicUrl

      print('downing image %s ' % (comicUrl))

      re = requests.get(comicUrl)

      re.raise_for_status()

    #print('1')

    imageFile = open(os.path.join('xkcd'+os.path.basename(comicUrl)),'wb')

    for chunk in re.iter_content(100000):

      imageFile.write(chunk)

    imageFile.close()

    prevlink = soup.select('a[rel="prev"]')[0]

    url = 'https://xkcd.com' + prevlink.get('href')

    print('done!')

    相关文章

      网友评论

          本文标题:最精简的爬虫 --仅需4行代码(python)

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