• 从零开始学Python 三(网络爬虫)


    本章由网络爬虫的编写来学习python。首先写几行代码抓取百度首页,提提精神,代码如下:

    import urllib.request
    
    file=urllib.request.urlopen("http://www.baidu.com")
    
    data=file.read()
    
    handle=open("code/python/baidu.html","wb")
    
    handle.write(data)
    
    handle.close()

    除了第一行导入第三方包之外,我们用5行代码实现了一个简单的程序:读取百度首页并存储在本地制定文件。下面来详细介绍代码:

    1.import urllib.request

    urllib库是python的一个操作url功能强大的库,经常用在爬虫程序中。使用上述代码,我们便可以在程序中打开并爬取网页。

    2.urllib.request.urlopen("http://www.baidu.com")

    使用urlopen方法,参数为想爬取的网页。成功之后,把爬取的内容赋值给file变量。

    另,读取file数据有2种方法:

    file.read() //读取全部数据
    file.readline()//读取一行数据

    3.handle=open("code/python/baidu.html","wb")

    通过open函数打开一个文件,并且以“wb”即二进制写入方式打开,然后赋值给hadle变量。需要注意首先建立对应的文件夹和文件,否则无法运行。错误如下:

    Traceback (most recent call last):
      File "<pyshell#10>", line 1, in <module>
        fhandle=open("/code/python","wb")
    FileNotFoundError: [Errno 2] No such file or directory:

    4.handle.write(data)

    使用write()方法将data数据写入文件

    5.handle.close()

    关闭文件。操作完文件之后一定要记得关闭。至此,我们就把百度首页保存到了本地文件:

    打开文件显示如下:

     其实,上面5行代码可以精简为1行,功能不变但代码更少:

    >>> import urllib.request
    >>> 
    >>> urllib.request.urlretrieve("http://www.baidu.com","code/python/baidu2.html")
    ('code/python/baidu2.html', <http.client.HTTPMessage object at 0x1060f8240>)
    >>> 

    接着,让我们更进一步,用程序模拟百度搜索操作。

    当我们在百度上查询时,是在输入框中输入关键字,然后点击回车,接着百度返回搜索结果。这一系列操作通过http语音描述如下:使用get方法,通过"http://www.baidu.com/s?wd="+关键字调用百度服务。明白背后原理之后,我们用python模拟搜索“逃税”的操作,代码如下:

    >>> url="http://www.baidu.com/s?wd="
    >>> key="逃税"
    >>> key_code=urllib.request.quote(key)
    >>> urllib.request.urlretrieve(url+key_code,"code/python/baidu逃税.html")
    ('code/python/baidu逃税.html', <http.client.HTTPMessage object at 0x1060f8f98>)

    打开本地文件后,发现和在百度上输入一模一样。

    上面代码有个关键点:URL标准中只允许一部分ASCII字符(字母、数字),其他的比如汉字不符合标准。因此不能直接在url后面拼接汉字,需要使用quote()方法进行编码。相应的,如果需要对编码的网址进行解码,可以使用unquote()方法。

    最后,以一个不完整的图片爬虫程序结束。

    现在,我们想把淘宝网上连衣裙分类里的图片全部下载到本地。首先,找到目标网址(https://s.taobao.com/list?spm=a217f.8051907.312003.5.19833308A93qss&q=%E8%BF%9E%E8%A1%A3%E8%A3%99&cat=16&seller_type=taobao&oetag=6745&source=qiangdiao&bcoffset=12&s=180)。打开开发者工具,查看图片地址。

    可以看到,我们已经拿到了图片路径,在浏览器上加上前缀"http://"就可以打开。

    因此,程序逻辑如下:

    循环获取网址内容->对于每个网址找到需要的图片->构造图片路径,下载到本地

    具体代码请等下期内容。

  • 相关阅读:
    bzoj 4197 寿司晚宴
    Codeforces Round #429 (Div. 2)ABC
    Codeforces Round #386 (Div. 2) E
    UESTC 电子科大专题训练 数论 L
    UESTC 电子科大专题训练 数论 E
    Codeforces Round #396 D
    UESTC 电子科大专题训练 DP-E
    UESTC 电子科大专题训练 数据结构 L
    UESTC 电子科大专题训练 数据结构 K
    UESTC 电子科大专题训练 数据结构-E
  • 原文地址:https://www.cnblogs.com/lizhaoE/p/9602915.html
Copyright © 2020-2023  润新知