Python学习 —— 实现简单爬虫

  为了加快学习python3.x于是直接看了许多有实际操作的小项目,查了许多资料后写了这个脚本,这个脚本主要是爬取百度图片‘东方幻想乡‘的图片,但发现有几个问题:

    1.图片会重复两次。

    2.图片只有81张,只匹配了fm=27的图片...

  下面给出代码:

from urllib import request
import re

class CrawlJPG:     #定义一个爬取图片的类
    def __init__(self):     # 构造函数
        print(‘Link start!‘)

    def __GetHtml(self, html):
        post = request.urlopen(html)
        page = post.read()
        return page

    def __GetImg(self, html):
        page = self.__GetHtml(html)     # 获取 html 页面数据
        page = page.decode(‘utf-8‘)     # 将格式转换为utf-8格式 TypeError: cannot use a string pattern on a bytes-like object
        recomp = re.compile(r‘https://\w{3}.\w{8}.\w{3}/\w{27}/\w{2}/u=[0-9]{9,10},[0-9]{9,10}&fm=\w{2}&gp=0.jpg‘)
        imgUrlList = recomp.findall(page)   # 和 html 页面正则匹配
        return imgUrlList   # 返回匹配得到的 jpg 的 url 列表

    def run(self, html):
        imgUrlList = self.__GetImg(html)
        ImgName = 0
        fp = open(‘C:\\Users\\adimin\\Desktop\\CrawlImg\\imgUrl.txt‘, ‘w‘)
        for imgUrl in imgUrlList:
            request.urlretrieve(imgUrl, ‘C:\\Users\\adimin\\Desktop\\CrawlImg\\{}.jpg‘ .format(str(ImgName)))
            print(‘Downloads:‘ + imgUrl)
            fp.write(str(imgUrl))
            ImgName += 1
        fp.close()

    def __del__(self):      # 析构函数
        print("Download finished!")

def main():
    url = ‘https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gbk&word=%B6%AB%B7%BD%BB%C3%CF%EB%CF%E7&fr=ala&ala=1&alatpl=adress&pos=0&hs=2&xthttps=111111‘
    GetImg = CrawlJPG()
    GetImg.run(url)

if __name__ == ‘__main__‘:
    main()

  参考了许多博客和资料,主要有:

    1.http://blog.csdn.net/clj198606061111/article/details/50816115

    2.https://www.cnblogs.com/speeding/p/5097790.html

    3.http://urllib3.readthedocs.io/en/latest/

    4.https://pyopenssl.org/en/stable/

    5.https://docs.python.org/3.6/library/urllib.html

    6.https://segmentfault.com/q/1010000004442233/a-1020000004448440

    7.http://urllib3.readthedocs.io/en/latest/user-guide.html

    8.菜鸟教程-python3

  还有一些记不得了...

  然后,通过这次的学习学到了很多,基本熟悉了python3的基本语法,还了解了正则表达式的写法等,于是用了面向对象的方式进行编程。

  代码中可以看到:一个爬取图片的类,构造函数、析构函数等。

  其实对于urllib3 package我还是有很多地方不明白。。。比如,我还写了另一个版本的url请求,用了urllib3.PoolManager(),运行没问题,但没办法下载图片

from urllib import request
import urllib3
import certifi
import re

class CrawlJPG:     #定义一个爬取图片的类
    def __init__(self):     # 构造函数
        print(‘Link start!‘)

    def __GetHtml(self, html):
        post = urllib3.PoolManager(  # 初始化,为了解决一个证书问题 安装了 pyOpenSSL 就有了certifi package,这样写就解决了InsecureRequestWarning警告
            cert_reqs=‘CERT_REQUIRED‘,
            ca_certs=certifi.where()
        )
        post = post.urlopen(‘GET‘, html)  # 请求打开网页
        page = post.read()  # 读取页面数据
        return page

    def __GetImg(self, html):
        page = self.__GetHtml(html)      # 获取 html 页面数据
        page = page.decode(‘utf-8‘)     # 将格式转换为utf-8格式 TypeError: cannot use a string pattern on a bytes-like object
        recomp = re.compile(r‘https://\w{3}.\w{8}.\w{3}/\w{27}/\w{2}/u=[0-9]{9,10},[0-9]{9,10}&fm=\w{2}&gp=0.jpg‘)
        imgUrlList = recomp.findall(page)   # 和 html 页面正则匹配
        return imgUrlList   # 返回匹配得到的 jpg 的 url 列表

    def run(self, html):
        imgUrlList = self.__GetImg(html)
        ImgName = 0
        fp = open(‘C:\\Users\\adimin\\Desktop\\CrawlImg\\imgUrl.txt‘, ‘w‘)
        for imgUrl in imgUrlList:
            request.urlretrieve(imgUrl, ‘C:\\Users\\adimin\\Desktop\\CrawlImg\\{}.jpg‘ .format(str(ImgName)))
            print(‘Downloads:‘ + imgUrl)
            fp.write(str(imgUrl))
            ImgName += 1
        fp.close()

    def __del__(self):      # 析构函数
        print("Download finished!")

def main():
    url = ‘https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gbk&word=%B6%AB%B7%BD%BB%C3%CF%EB%CF%E7&fr=ala&ala=1&alatpl=adress&pos=0&hs=2&xthttps=111111‘
    GetImg = CrawlJPG()
    GetImg.run(url)

if __name__ == ‘__main__‘:
    main()

  再好好研究一段时间吧。

  对了 上次说没能用PyCharm来写的问题我已经解决了。但对python的关键字不太熟,还是配合上sublimb Text比较好...

  最后,这篇就总结到这了。

原文地址:https://www.cnblogs.com/darkchii/p/8214949.html

时间: 2024-08-25 20:37:21

Python学习 —— 实现简单爬虫的相关文章

2019最新Python学习教程(Python学习路线_Python爬虫教程)爬虫工程师必备的10个爬虫工具

2019最新Python学习教程(Python学习路线_Python爬虫教程)爬虫工程师必备的10个爬虫工具 爬虫工程师必备的10个爬虫工具! 最近很多学爬虫的伙伴让推荐顺手的爬虫工具,总结了一下,把这些好用的爬虫工具都跟你们找齐活了! 磨刀不误砍柴工!都知道工欲善其事必先利其器,那么作为经常要和各大网站做拉锯战的爬虫工程师们,更需要利用利用好身边的一切法器,才能更快的攻破对方防线.这里以日常爬虫流程,给大家介绍十款爬虫工具,相信大家掌握以后,工作效率提高是完全没有问题了! 大家也可以看看有你们

【Python】:简单爬虫作业

使用Python编写的图片爬虫作业: 1 #coding=utf-8 2 3 import urllib 4 import re 5 6 def getPage(url): 7 #urllib.urlopen(url[, data[, proxies]]) : 8 #创建一个表示远程url的类文件对象, 9 #然后像本地文件一样操作这个类文件对象来获取远程数据 10 page = urllib.urlopen(url) 11 return page.read() 12 13 def downlo

python学习笔记:"爬虫+有道词典"实现一个简单的英译汉程序

1.有道的翻译 网页:www.youdao.com Fig1 Fig2 Fig3 Fig4 再次点击"自动翻译"->选中'Network'->选中'第一项',如下: Fig5 然后显示出如下内容,红框画出的部分是等会编写代码需要的地方: Fig6 Fig7 再看看翻译的结果: Fig8 2.python实现英译汉: 原理:把需要翻译的内容输入给有道词典,然后通过程序把翻译的结果爬下来. 1 # -*- coding:utf-8 -*- 2 """

Python学习之简单网页爬虫

0x00案例   爬取博客园某页面的所有图片并下载到本地 连续搞了一周的python,收获颇多,主要还是锻炼了自己的脾气...话不多说,先贴上脚本 #coding:utf-8 import urllib2 import re url="https://www.cnblogs.com/peterpan0707007/p/7620048.html" headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:59.0) Ge

【python学习】网络爬虫——爬百度贴吧帖子内容

很久以前,很喜欢泡贴吧,因为那里有自己牵挂的人和事 一转眼过去好多年了...... 一个简单的学习爬虫的例子,爬百度贴吧帖子内容 代码如下: # -*- coding:utf-8 -*- #import urllib import urllib2 import re #功能性类,过滤掉html标签的类 class Tool:     #去除img标签,7位长空格     removeImg = re.compile('<img.*?>| {7}|')     #删除超链接标签     remo

[python]做一个简单爬虫

为什么选择python,它强大的库可以让你专注在爬虫这一件事上而不是更底层的更繁杂的事 爬虫说简单很简单,说麻烦也很麻烦,完全取决于你的需求是什么以及你爬的网站所决定的,遇到的第一个简单的例子是paste.ubuntu.com 这是一个贴代码的网站,没事喜欢看看有没有什么好玩的东西,只是上面大部分都是minecraft的东西,于是写了以下代码 1 import urllib2 2 import socket 3 import re 4 def getData(url, timeOut = 10)

python学习笔记之爬虫之爬取百度贴吧某一帖子

从大神这儿静觅 ? Python爬虫实战二之爬取百度贴吧帖子讲的很不错,按照步骤一步一步的做效果很明显.第一次真正做出一个小爬虫程序,所以在csdn写出来也是对自己的一种鞭策一种鼓励,不喜勿喷,还请大神不吝赐教. 因为大神博文讲的很详细(真心详细),所以步骤我就不一一细说了 先把自己的代码贴出来(大部分一样): #!/usr/bin/env python # coding=utf-8 import urllib2 import urllib import re class Tool(object

Python学习笔记——与爬虫相关的网络知识

1 关于URL URL(Uniform / Universal Resource Locator):统一资源定位符,用于完整地描述Internet上网页和其他资源的地址的一种标识方法 URL是爬虫的入口,--非常重要 基本格式: scheme://host[:port# ]/path/.../[?query-string][#anchor] scheme:协议(例如:http.https.ftp) host:服务器的IP地址或域名 port#:服务器端口(协议默认端口80,可缺省) path:访

python学习-ansible简单使用1

一.介绍 Ansible 一种集成 IT 系统的配置管理.应用部署.执行特定任务的开源平台,是 AnsibleWorks 公司名下的项目,该公司由 Cobbler 及 Func 的作者于 2012 年创建成立. Ansible 基于 Python 语言实现,由 Paramiko 和 PyYAML 两个关键模块构建. Ansible 特点: >> 部署简单,只需在主控端部署 Ansible 环境,被控端无需做任何操作.>> 默认使用 SSH(Secure Shell)协议对设备进行管