python3实战入门爬虫篇-网页爬虫,图片爬虫,新闻网站爬虫

2019年4月16日零基础入门Python,第二天就给自己找了一个任务,做网站文章的爬虫小项目,因为实战是学代码的最快方式。所以从今天起开始写Python实战入门系列教程,也建议大家学Python时一定要多写多练。

目标

1,学习Python爬虫2,爬取新闻网站新闻列表3,爬取图片4,把爬取到的数据存在本地文件夹或者数据库5,学会用pycharm的pip安装Python需要用到的扩展包一,首先看看Python是如何简单的爬取网页的

1,准备工作

项目用的BeautifulSoup4和chardet模块属于三方扩展包,如果没有请自行pip安装,我是用pycharm来做的安装,下面简单讲下用pycharm安装chardet和BeautifulSoup4

在pycharm的设置里按照下图的步骤操作

如下图搜索你要的扩展类库,如我们这里需要安装chardet直接搜索就行,然后点击install package, BeautifulSoup4做一样的操作就行

安装成功后就会出现在在安装列表中,到此就说明我们安装网络爬虫扩展库成功

二,由浅入深,我们先抓取网页

我们这里以抓取简书首页为例:http://www.jianshu.com/

# 简单的网络爬虫

from urllib import request

import chardet

response = request.urlopen("http://www.jianshu.com/")

html = response.read()

charset = chardet.detect(html)# {'language': '', 'encoding': 'utf-8', 'confidence': 0.99}

html = html.decode(str(charset["encoding"])) # 解码

print(html)

由于抓取的html文档比较长,这里简单贴出来一部分给大家看下

<!DOCTYPE html>

<!--[if IE 6]><html class="ie lt-ie8"><![endif]-->

<!--[if IE 7]><html class="ie lt-ie8"><![endif]-->

<!--[if IE 8]><html class="ie ie8"><![endif]-->

<!--[if IE 9]><html class="ie ie9"><![endif]-->

<!--[if !IE]><!--> <html> <!--<![endif]-->

<head>

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible" content="IE=Edge">

<meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=no">

<!-- Start of Baidu Transcode -->

<meta http-equiv="Cache-Control" content="no-siteapp" />

<meta http-equiv="Cache-Control" content="no-transform" />

<meta name="applicable-device" content="pc,mobile">

<meta name="MobileOptimized" content="width"/>

<meta name="HandheldFriendly" content="true"/>

<meta name="mobile-agent" content="format=html5;url=http://localhost/">

<!-- End of Baidu Transcode -->

<meta name="description" content="简书是一个优质的创作社区,在这里,你可以任性地创作,一篇短文、一张照片、一首诗、一幅画……我们相信,每个人都是生活中的艺术家,有着无穷的创造力。">

<meta name="keywords" content="简书,简书官网,图文编辑软件,简书下载,图文创作,创作软件,原创社区,小说,散文,写作,阅读">

..........后面省略一大堆

这就是Python3的爬虫简单入门,是不是很简单,建议大家多敲几遍

三,Python3爬取网页里的图片并把图片保存到本地文件夹

目标

爬取百度贴吧里的图片把图片保存到本地,都是妹子图片奥不多说,直接上代码,代码里的注释很详细。大家仔细阅读注释就可以理解了import re

import urllib.request

#爬取网页html

def getHtml(url):

page = urllib.request.urlopen(url)

html = page.read()

return html

html = getHtml("http://tieba.baidu.com/p/3205263090")

html = html.decode('UTF-8')

#获取图片链接的方法

def getImg(html):

# 利用正则表达式匹配网页里的图片地址

reg = r'src="([.*S]*.jpg)" pic_ext="jpeg"'

imgre=re.compile(reg)

imglist=re.findall(imgre,html)

return imglist

imgList=getImg(html)

imgCount=0

#for把获取到的图片都下载到本地pic文件夹里,保存之前先在本地建一个pic文件夹

for imgPath in imgList:

f=open("../pic/"+str(imgCount)+".jpg",'wb')

f.write((urllib.request.urlopen(imgPath)).read())

f.close()

imgCount+=1

print("全部抓取完成")

迫不及待的看下都爬取到了些什么美图

就这么轻易的爬取到了24个妹子的图片。是不是很简单。

四,Python3爬取新闻网站新闻列表

这里我们只爬取新闻标题,新闻url,新闻图片链接。爬取到的数据目前只做展示,等我学完Python操作数据库以后会把爬取到的数据保存到数据库。到这里稍微复杂点,就分布给大家讲解

1 这里我们需要先爬取到html网页上面第一步有讲怎么抓取网页2分析我们要抓取的html标签

分析上图我们要抓取的信息再div中的a标签和img标签里,所以我们要想的就是怎么获取到这些信息

这里就要用到我们导入的BeautifulSoup4库了,这里的关键代码

# 使用剖析器为html.parser

soup = BeautifulSoup(html, 'html.parser')

# 获取到每一个class=hot-article-img的a节点

allList = soup.select('.hot-article-img')

上面代码获取到的allList就是我们要获取的新闻列表,抓取到的如下

[<div class="hot-article-img">

<a href="/article/211390.html" target="_blank">

![](https://img.huxiucdn.com/article/cover/201708/22/173535862821.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg)

</a>

</div>, <div class="hot-article-img">

<a href="/article/214982.html" target="_blank" title="TFBOYS成员各自飞,商业价值天花板已现?">

<!--视频和图片保留一个-->

![](https://img.huxiucdn.com/article/cover/201709/17/094856378420.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg)

</a>

</div>, <div class="hot-article-img">

<a href="/article/213703.html" target="_blank" title="买手店江湖">

<!--视频和图片保留一个-->

![](https://img.huxiucdn.com/article/cover/201709/17/122655034450.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg)

</a>

</div>, <div class="hot-article-img">

<a href="/article/214679.html" target="_blank" title="iPhone X正式告诉我们,手机和相机开始分道扬镳">

<!--视频和图片保留一个-->

![](https://img.huxiucdn.com/article/cover/201709/14/182151300292.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg)

</a>

</div>, <div class="hot-article-img">

<a href="/article/214962.html" target="_blank" title="信用已被透支殆尽,乐视汽车或成贾跃亭弃子">

<!--视频和图片保留一个-->

![](https://img.huxiucdn.com/article/cover/201709/16/210518696352.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg)

</a>

</div>, <div class="hot-article-img">

<a href="/article/214867.html" target="_blank" title="别小看“搞笑诺贝尔奖”,要向好奇心致敬">

<!--视频和图片保留一个-->

![](https://img.huxiucdn.com/article/cover/201709/15/180620783020.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg)

</a>

</div>, <div class="hot-article-img">

<a href="/article/214954.html" target="_blank" title="10 年前改变世界的,可不止有 iPhone | 发车">

<!--视频和图片保留一个-->

![](https://img.huxiucdn.com/article/cover/201709/16/162049096015.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg)

</a>

</div>, <div class="hot-article-img">

<a href="/article/214908.html" target="_blank" title="感谢微博替我做主">

<!--视频和图片保留一个-->

![](https://img.huxiucdn.com/article/cover/201709/16/010410913192.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg)

</a>

</div>, <div class="hot-article-img">

<a href="/article/215001.html" target="_blank" title="苹果确认取消打赏抽成,但还有多少内容让你觉得值得掏腰包?">

<!--视频和图片保留一个-->

![](https://img.huxiucdn.com/article/cover/201709/17/154147105217.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg)

</a>

</div>, <div class="hot-article-img">

<a href="/article/214969.html" target="_blank" title="中国音乐的“全面付费”时代即将到来?">

<!--视频和图片保留一个-->

![](https://img.huxiucdn.com/article/cover/201709/17/101218317953.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg)

</a>

</div>, <div class="hot-article-img">

<a href="/article/214964.html" target="_blank" title="百丽退市启示录:“一代鞋王”如何与新生代消费者渐行渐远">

<!--视频和图片保留一个-->

![](https://img.huxiucdn.com/article/cover/201709/16/213400162818.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg)

</a>

</div>]

这里数据是抓取到了,但是太乱了,并且还有很多不是我们想要的,下面就通过遍历来提炼出我们的有效信息

3 提取有效信息#遍历列表,获取有效信息

for news in allList:

aaa = news.select('a')

# 只选择长度大于0的结果

if len(aaa) > 0:

# 文章链接

try:#如果抛出异常就代表为空

href = url + aaa[0]['href']

except Exception:

href=''

# 文章图片url

try:

imgUrl = aaa[0].select('img')[0]['src']

except Exception:

imgUrl=""

# 新闻标题

try:

title = aaa[0]['title']

except Exception:

title = "标题为空"

print("标题",title,"nurl:",href,"n图片地址:",imgUrl)

print("==============================================================================================")

这里添加异常处理,主要是有的新闻可能没有标题,没有url或者图片,如果不做异常处理,可能导致我们爬取的中断。

过滤后的有效信息

标题 标题为空

url: https://www.huxiu.com/article/211390.html

图片地址: https://img.huxiucdn.com/article/cover/201708/22/173535862821.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg

==============================================================================================

标题 TFBOYS成员各自飞,商业价值天花板已现?

url: https://www.huxiu.com/article/214982.html

图片地址: https://img.huxiucdn.com/article/cover/201709/17/094856378420.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg

==============================================================================================

标题 买手店江湖

url: https://www.huxiu.com/article/213703.html

图片地址: https://img.huxiucdn.com/article/cover/201709/17/122655034450.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg

==============================================================================================

标题 iPhone X正式告诉我们,手机和相机开始分道扬镳

url: https://www.huxiu.com/article/214679.html

图片地址: https://img.huxiucdn.com/article/cover/201709/14/182151300292.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg

==============================================================================================

标题 信用已被透支殆尽,乐视汽车或成贾跃亭弃子

url: https://www.huxiu.com/article/214962.html

图片地址: https://img.huxiucdn.com/article/cover/201709/16/210518696352.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg

==============================================================================================

标题 别小看“搞笑诺贝尔奖”,要向好奇心致敬

url: https://www.huxiu.com/article/214867.html

图片地址: https://img.huxiucdn.com/article/cover/201709/15/180620783020.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg

==============================================================================================

标题 10 年前改变世界的,可不止有 iPhone | 发车

url: https://www.huxiu.com/article/214954.html

图片地址: https://img.huxiucdn.com/article/cover/201709/16/162049096015.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg

==============================================================================================

标题 感谢微博替我做主

url: https://www.huxiu.com/article/214908.html

图片地址: https://img.huxiucdn.com/article/cover/201709/16/010410913192.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg

==============================================================================================

标题 苹果确认取消打赏抽成,但还有多少内容让你觉得值得掏腰包?

url: https://www.huxiu.com/article/215001.html

图片地址: https://img.huxiucdn.com/article/cover/201709/17/154147105217.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg

==============================================================================================

标题 中国音乐的“全面付费”时代即将到来?

url: https://www.huxiu.com/article/214969.html

图片地址: https://img.huxiucdn.com/article/cover/201709/17/101218317953.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg

==============================================================================================

标题 百丽退市启示录:“一代鞋王”如何与新生代消费者渐行渐远

url: https://www.huxiu.com/article/214964.html

图片地址: https://img.huxiucdn.com/article/cover/201709/16/213400162818.jpg?imageView2/1/w/280/h/210/|imageMogr2/strip/interlace/1/quality/85/format/jpg

==============================================================================================

到这里我们抓取新闻网站新闻信息就大功告成了,下面贴出来完整代码

from bs4 import BeautifulSoup

from urllib import request

import chardet

url = "https://www.huxiu.com"

response = request.urlopen(url)

html = response.read()

charset = chardet.detect(html)

html = html.decode(str(charset["encoding"])) # 设置抓取到的html的编码方式

# 使用剖析器为html.parser

soup = BeautifulSoup(html, 'html.parser')

# 获取到每一个class=hot-article-img的a节点

allList = soup.select('.hot-article-img')

#遍历列表,获取有效信息

for news in allList:

aaa = news.select('a')

# 只选择长度大于0的结果

if len(aaa) > 0:

# 文章链接

try:#如果抛出异常就代表为空

href = url + aaa[0]['href']

except Exception:

href=''

# 文章图片url

try:

imgUrl = aaa[0].select('img')[0]['src']

except Exception:

imgUrl=""

# 新闻标题

try:

title = aaa[0]['title']

except Exception:

title = "标题为空"

print("标题",title,"nurl:",href,"n图片地址:",imgUrl)

print("==============================================================================================")

数据获取到了我们还要把数据存到数据库,只要存到我们的数据库里,数据库里有数据了,就可以做后面的数据分析处理,也可以用这些爬取来的文章,给app提供新闻api接口,当然这都是后话了,等我自学到Python数据库操作以后,会写一篇文章

《Python3实战入门数据库篇---把爬取到的数据存到数据库》

编程小石头,为分享干货而生!据说,每个年轻上进,颜值又高的互联网人都关注了编程小石头。

原文地址:https://www.toutiao.com/article/6680814026391290381/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Python中的函数(二) 在上一篇文章中提到了Python中函数的定义和使用,在这篇文章里我们来讨论下关于函数的一些更深的话题。在学习C语言函数的时候,遇到的问题主要有形参实参的区别、参数的传递和改变、变量的作用域。同样在Python中,关于对函数的理解和使用也存在这些问题。下面来逐一讲解。一.函
Python中的字符串 可能大多数人在学习C语言的时候,最先接触的数据类型就是字符串,因为大多教程都是以&quot;Hello world&quot;这个程序作为入门程序,这个程序中要打印的&quot;Hello world&quot;就是字符串。如果你做过自然语言处理方面的研究,并且用Python
Python 面向对象编程(一) 虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程。下面就来了解一下如何在Python中进行对象编程。一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法。 类是对现实世界中一些事物的封装,
Python面向对象编程(二) 在前面一篇文章中谈到了类的基本定义和使用方法,这只体现了面向对象编程的三大特点之一:封装。下面就来了解一下另外两大特征:继承和多态。 在Python中,如果需要的话,可以让一个类去继承一个类,被继承的类称为父类或者超类、也可以称作基类,继承的类称为子类。并且Pytho
Python中的函数(一) 接触过C语言的朋友对函数这个词肯定非常熟悉,无论在哪门编程语言当中,函数(当然在某些语言里称作方法,意义是相同的)都扮演着至关重要的角色。今天就来了解一下Python中的函数用法。一.函数的定义 在某些编程语言当中,函数声明和函数定义是区分开的(在这些编程语言当中函数声明
在windows下如何快速搭建web.py开发框架 用Python进行web开发的话有很多框架供选择,比如最出名的Django,tornado等,除了这些框架之外,有一个轻量级的框架使用起来也是非常方便和顺手,就是web.py。它由一名黑客所创建,但是不幸的是这位创建者于2013年自杀了。据说现在由
将Sublime Text 2搭建成一个好用的IDE 说起编辑器,可能大部分人要推荐的是Vim和Emacs,本人用过Vim,功能确实强大,但是不是很习惯,之前一直有朋友推荐SUblime Text 2这款编辑器,然后这段时间就试了一下,就深深地喜欢上这款编辑器了...
Python中的模块 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt这个函数,必须用语句&quot;#include&lt;math.h&gt;&quot;引入math.h这个头文件,否则是无法正常进行调用的。那么在Python中,如果要引用一些内置的函数,该怎么处理呢?在Python中
Python的基础语法 在对Python有了基础的认识之后,下面来了解一下Python的基础语法,看看它和C语言、java之间的基础语法差异。一.变量、表达式和语句 Python中的语句也称作命令,比如print &quot;hello python&quot;这就是一条语句。 表达式,顾名思义,是
Eclipse+PyDevʽjango+Mysql搭建Python web开发环境 Python的web框架有很多,目前主流的有Django、Tornado、Web.py等,最流行的要属Django了,也是被大家最看好的框架之一。下面就来讲讲如何搭建Django的开发环境。一.准备工作 需要下载的
在windows下安装配置Ulipad 今天推荐一款轻便的文本编辑器Ulipad,用来写一些小的Python脚本非常方便。 Ulipad下载地址: https://github.com/limodou/ulipad http://files.cnblogs.com/dolphin0520/u...
Python中的函数(三) 在前面两篇文章中已经探讨了函数的一些相关用法,下面一起来了解一下函数参数类型的问题。在C语言中,调用函数时必须依照函数定义时的参数个数以及类型来传递参数,否则将会发生错误,这个是严格进行规定的。然而在Python中函数参数定义和传递的方式相比而言就灵活多了。一.函数参数的
在Notepad++中搭配Python开发环境 Python在最近几年一度成为最流行的语言之一,不仅仅是因为它简洁明了,更在于它的功能之强大。它不仅能够完成一般脚本语言所能做的事情,还能很方便快捷地进行大规模的项目开发。在学习Python之前我们来看一下Python的历史由来,&quot;Pytho
Python中的条件选择和循环语句 同C语言、Java一样,Python中也存在条件选择和循环语句,其风格和C语言、java的很类似,但是在写法和用法上还是有一些区别。今天就让我们一起来了解一下。一.条件选择语句 Python中条件选择语句的关键字为:if 、elif 、else这三个。其基本形式如
关于raw_input( )和sys.stdin.readline( )的区别 之前一直认为用raw_input( )和sys.stdin.readline( )来获取输入的效果完全相同,但是最近在写程序时有类似这样一段代码:import sysline = sys.stdin.readline()
初识Python 跟学习所有的编程语言一样,首先得了解这门语言的编程风格和最基础的语法。下面就让我们一起来了解一下Python的编程风格。1.逻辑行与物理行 在Python中有逻辑行和物理行这个概念,物理行是指在编辑器中实际看到的一行,逻辑行是指一条Python语句。在Python中提倡一个物理行只
当我们的代码是有访问网络相关的操作时,比如http请求或者访问远程数据库,经常可能会发生一些错误,有些错误可能重新去发送请求就会成功,本文分析常见可能需要重试的场景,并最后给出python代码实现。
1.经典迭代器 2.将Sentence中的__iter__改成生成器函数 改成生成器后用法不变,但更加简洁。 3.惰性实现 当列表比较大,占内存较大时,我们可以采用惰性实现,每次只读取一个元素到内存。 或者使用更简洁的生成器表达式 4.yield from itertools模块含有大量生成器函数可
本文介绍简单介绍socket的常用函数,并以python-kafka中的源码socketpair为例,来讲解python socket的运用
python实践中经常出现编码相关的异常,大多网上找资料而没有理解原理,导致一次次重复错误。本文对常用Unicode、UTF-8、GB2312编码的原理进行介绍,接着介绍了python字符类型unicode和str以及常见编解码错误UnicodeEncodeError和UnicodeDEcodeEr