0. Python 基础

先放上Python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯)

关于Python 3 基础语法方面的东西,网上有很多,大家可以自行查找.

一. 最简单的爬取程序

爬取百度首页源代码:

来看上面的代码:

对于python 3来说,urllib是一个非常重要的一个模块 ,可以非常方便的模拟浏览器访问互联网,对于python 3 爬虫来说, urllib更是一个必不可少的模块,它可以帮助我们方便地处理URL.

urllib.request是urllib的一个子模块,可以打开和处理一些复杂的网址

The urllib.requestmodule defines functions and classes which help in opening URLs (mostly HTTP) in a complex world — basic and digest authentication, redirections, cookies and more.

urllib.request.urlopen()方法实现了打开url,并返回一个 http.client.HTTPResponse对象,通过http.client.HTTPResponse的read()方法,获得response body,转码最后通过print()打印出来.

urllib.request.urlopen(urldata=None, [timeout, ]***, cafile=Nonecapath=Nonecadefault=Falsecontext=None)For HTTP and HTTPS URLs, this function returns a http.client.HTTPResponseobject slightly modified.< 出自: https://docs.python.org/3/library/urllib.request.html >

decode('utf-8')用来将页面转换成utf-8的编码格式,否则会出现乱码

二 模拟浏览器爬取信息

在访问某些网站的时候,网站通常会用判断访问是否带有头文件来鉴别该访问是否为爬虫,用来作为反爬取的一种策略。

先来看一下Chrome的头信息(F12打开开发者模式)如下:

在这里相信有许多想要学习Python的同学,大家可以+下Python学习分享裙:五二八 三九七 六一七,即可免费领取一整套系统的 Python学习教程!

如图,访问头信息中显示了浏览器以及系统的信息(headers所含信息众多,具体可自行查询)

Python中urllib中的request模块提供了模拟浏览器访问的功能,代码如下:

from urllib import request

url = 'http://www.baidu.com'

# page = request.Request(url)

# page.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36')

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}

page = request.Request(url, headers=headers)

page_info = request.urlopen(page).read().decode('utf-8')

print(page_info)

可以通过add_header(key, value) 或者直接以参数的形式和URL一起请求访问,urllib.request.Request()

urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

三 爬虫利器Beautiful Soup

Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.

文档中的例子其实说的已经比较清楚了,那下面就以爬取简书首页文章的标题一段代码来演示一下:

先来看简书首页的源代码:

可以发现简书首页文章的标题都是在<a/>标签中,并且class='title',所以,通过

find_all('a', 'title')

便可获得所有的文章标题,具体实现代码及结果如下:

# -*- coding:utf-8 -*-

from urllib import request

from bs4 import BeautifulSoup

url = r'http://www.jianshu.com'

# 模拟真实浏览器进行访问

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}

page = request.Request(url, headers=headers)

page_info = request.urlopen(page).read()

page_info = page_info.decode('utf-8')

# 将获取到的内容转换成BeautifulSoup格式,并将html.parser作为解析器

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

# 以格式化的形式打印html

# print(soup.prettify())

titles = soup.find_all('a', 'title') # 查找所有a标签中class='title'的语句

# 打印查找到的每一个a标签的string

for title in titles:

print(title.string)

Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,下表列出了主要的解析器,以及它们的优缺点:

四 将爬取的信息存储到本地

之前我们都是将爬取的数据直接打印到了控制台上,这样显然不利于我们对数据的分析利用,也不利于保存,所以现在就来看一下如何将爬取的数据存储到本地硬盘。

1 对.txt文件的操作

读写文件是最常见的操作之一,python3 内置了读写文件的函数:open

open(filemode='r'buffering=-1encoding=Noneerrors=Nonenewline=Noneclosefd=Trueopener=None))Open file and return a corresponding file object. If the file cannot be opened, an OSErroris raised.

其中比较常用的参数为filemode,参数file为文件的路径,参数mode为操作文件的方式(读/写),函数的返回值为一个file对象,如果文件操作出现异常的话,则会抛出 一个OSError

还以简书首页文章题目为例,将爬取到的文章标题存放到一个.txt文件中,具体代码如下:

# -*- coding:utf-8 -*-

from urllib import request

from bs4 import BeautifulSoup

url = r'http://www.jianshu.com'

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}

page = request.Request(url, headers=headers)

page_info = request.urlopen(page).read().decode('utf-8')

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

titles = soup.find_all('a', 'title')

try:

# 在E盘以只写的方式打开/创建一个名为 titles 的txt文件

file = open(r'E:itles.txt', 'w')

for title in titles:

# 将爬去到的文章题目写入txt中

file.write(title.string + '

')

finally:

if file:

# 关闭文件(很重要)

file.close()

open中mode参数的含义见下表:

其中't'为默认模式,'r'相当于'rt',符号可以叠加使用,像'r+b'

另外,对文件操作一定要注意的一点是:打开的文件一定要关闭,否则会占用相当大的系统资源,所以对文件的操作最好使用try:...finally:...的形式。但是try:...finally:...的形式会使代码显得比较杂乱,所幸python中的with语句可以帮我们自动调用close()而不需要我们写出来,所以,上面代码中的try:...finally:...可使用下面的with语句来代替:

with open(r'E:itle.txt', 'w') as file:

for title in titles:

file.write(title.string + '

')

效果是一样的,建议使用with语句

2 图片的储存

有时候我们的爬虫不一定只是爬取文本数据,也会爬取一些图片,下面就来看怎么将爬取的图片存到本地磁盘。

我们先来选好目标,知乎话题:女生怎么健身锻造好身材? (单纯因为图多,不要多想哦 (# _ # ) )

看下页面的源代码,找到话题下图片链接的格式,如图:

可以看到,图片在img标签中,且class=origin_image zh-lightbox-thumb,而且链接是由.jpg结尾,我们便可以用Beautiful Soup结合正则表达式的方式来提取所有链接,如下:

links = soup.find_all('img', "origin_image zh-lightbox-thumb",src=re.compile(r'.jpg$'))

提取出所有链接后,使用request.urlretrieve来将所有链接保存到本地

Copy a network object denoted by a URL to a local file. If the URL points to a local file, the object will not be copied unless filename is supplied. Return a tuple (filename, headers)where filename is the local file name under which the object can be found, and headers is whatever the info()method of the object returned by urlopen()returned (for a remote object). Exceptions are the same as for urlopen().

具体实现代码如下:

# -*- coding:utf-8 -*-

import time

from urllib import request

from bs4 import BeautifulSoup

import re

url = r'https://www.zhihu.com/question/22918070'

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}

page = request.Request(url, headers=headers)

page_info = request.urlopen(page).read().decode('utf-8')

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

# Beautiful Soup和正则表达式结合,提取出所有图片的链接(img标签中,class=**,以.jpg结尾的链接)

links = soup.find_all('img', "origin_image zh-lightbox-thumb",src=re.compile(r'.jpg$'))

# 设置保存的路径,否则会保存到程序当前路径

local_path = r'E:Pic'

for link in links:

print(link.attrs['src'])

# 保存链接并命名,time防止命名冲突

request.urlretrieve(link.attrs['src'], local_path+r'%s.jpg' % time.time())

2019年最新python教程

如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的吗?

说不定你学了可能是两年前人家就学过的内容,在这小编分享一波2019最新的python全套教程最后小编为大家准备了9月份新出的Python自学视频教程,共计约200G,免费分享给大家!需要的在评论区留言。

Python开发大师总结出了超级详细的Python爬虫学习清单,免费教程相关推荐

  1. Python大佬总结出了超级详细的Python爬虫学习清单,新手免费领取

    0. Python 基础 先放上Python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于Python 3 基础语法方面的东西,网上有很多,大家可以 ...

  2. 如何使用python编程画图_建议收藏-超级详细的python画图教程

    同切圆 视频中会详细介绍画图各种命令的用法,如果你学过scratch等图形化编程,想过渡到python编程,建议从这个视频入手.当然如果你打算从零开始学习python编程,也可以从这个视频入手,它的语 ...

  3. 在电脑上安装python的步骤-python中pygame安装过程(超级详细)

    安装时是需要设置python环境变量的,下载python的时候底下有个小框框(没有默认选中) Add Python 3.7 to PATH需要选择的,如果没有选择的话,需要自己设置,我一般比较懒,卸载 ...

  4. 超级详细的Python程序设计学习笔记,适合Python二级备考和自学Python的小白(me too)

    超级详细的Python学习笔记,适合Python二级备考和自学Python的小白(me too). 写作不易,喜欢的话点个赞吧

  5. 一份超级详细的Python零基础学习资料(仅此一家,可能会被404抓紧收藏)

    一.学习Python必备技能图谱 二.0基础如何系统学习Python? 一.Python的普及入门 1.1 Python入门学习须知和书本配套学习建议 1.2 Python简史 1.3 Python的 ...

  6. github怎么搜索开源的代码_5.2.PYTHON开发利器之使用VS Code+GitHub进行python开源项目开发...

    上一节介绍了使用vscode+Git进行python程序版本控制,详见5.1.PYTHON开发利器之使用VS Code+Git进行python程序版本控制 0.前言 GitHub是目前最大的开源代码托 ...

  7. 如何在Windows上做Python开发?微软出了官方教程(附链接)

    来源:机器之心 本文附教程,建议阅读5分钟. 本文为你分享微软最近发布的关于在Windows上做Python开发的一系列官方教程. 在Windows上做Python开发太痛苦?微软最近发布了一系列官方 ...

  8. asp.net web开发步骤_如何在Windows上做Python开发?微软出了官方教程

    机器之心报道 参与:路 在 Windows 上做 Python 开发太痛苦?微软最近发布了一系列官方教程,终于-- 教程地址:https://docs.microsoft.com/zh-cn/wind ...

  9. Python字典的各种sao操作(超级详细)

    作者:小张学Python 本文链接: https://mp.weixin.qq.com/s/zUW5PkbqRFsncZzpi6uDOA 转载请注明来源!!! 今天小张帮大家简单介绍下Python的一 ...

最新文章

  1. keras 的 example 文件 mnist_denoising_autoencoder.py 解析
  2. SlickEdit 2016(V21)
  3. H3C PPP MP配置示例二(续)
  4. 使用命令行建立Zend Framework项目
  5. vins中imu融合_VINS-Mono代码分析与总结(最终版)
  6. 【HDU -1568】 Fibonacci(斐波那契通项公式+取对数)
  7. 2-27 最短路径《啊哈算法》2-28完成四种算法
  8. DataList的使用,Repeater
  9. gdb 调试kvm虚拟机_GDB+QEMU调试内核模块(实践篇)
  10. 索引 | ggplot2基础语法系列推文汇总
  11. 兼容firstChild和firstElementChild
  12. 华为微博抽奖头目两次中奖:大哥咱玩不起,不玩行不行?
  13. 自定义Dialog的小实战——根据地区选择手机号码前缀
  14. 如何在高共模电压下测量小差分电压
  15. vulhub漏洞复现十七_GhostScript
  16. 交换机配置软件crt安装_模拟器安装使用
  17. photoshop cs6基础学习
  18. win10 系统亮度无法调节
  19. cygwin和mingw的比较
  20. 【C标准库】详解feof函数与EOF

热门文章

  1. flex布局的justify-content属性写法注意事项
  2. 鸿蒙记 四十四,书画装裱谨记的四十个小窍门
  3. B+树相比B树的优势
  4. 数项级数——2正项级数
  5. 为什么要使用ZooKeeper
  6. 只有想不到,没有做不到
  7. 连接手机、PC后,SD卡文件不显示怎么解决?
  8. Excel-单元格自动换行
  9. css中border边框纹理,8个CSS实现的纹理图案
  10. 人体穴位图--脚底部反射区图