〇. python 基础

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

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

一. 最简单的爬取程序

爬取百度首页源代码:

来看上面的代码:

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

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

如果你在学习Python的过程当中有遇见任何问题,可以加入我的python交流学习qq群:250933691,多多交流问题,互帮互助,群里有不错的学习教程和开发工具。学习python有任何问题(学习方法,学习效率,如何就业),可以随时来咨询我

The urllib.request

module 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=None,cadefault=Falsecontext=None)

For HTTP and HTTPS URLs, this function returns a http.client.HTTPResponse

object slightly modified.

< 出自: https://docs.python.org/3/library/urllib.request.html >

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

二  模拟浏览器爬取信息

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

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

如图,访问头信息中显示了浏览器以及系统的信息(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 -*-

fromurllibimportrequest

frombs4importBeautifulSoup

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

fortitleintitles:

print(title.string)

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

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

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

1 对.txt文件的操作

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

open(filemode='r'buffering=-1encoding=Noneerrors=Nonenewline=None,closefd=Trueopener=None))

Open file and return a corresponding  file object. If the file cannot be opened, an OSError

is raised.

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

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

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

fromurllibimportrequest

frombs4importBeautifulSoup

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:\titles.txt','w')

fortitleintitles:

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

file.write(title.string +'\n')

finally:

iffile:

# 关闭文件(很重要)

file.close()

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

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

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

withopen(r'E:\title.txt','w')asfile:

fortitleintitles:

file.write(title.string +'\n')

效果是一样的,建议使用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, andheaders 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 -*-

importtime

fromurllibimportrequest

frombs4importBeautifulSoup

importre

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'

forlinkinlinks:

print(link.attrs['src'])

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

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

运行结果

注意营养哦~~~

如果你在学习Python的过程当中有遇见任何问题,可以加入我的python交流学习qq群:250933691,多多交流问题,互帮互助,群里有不错的学习教程和开发工具。学习python有任何问题(学习方法,学习效率,如何就业),可以随时来咨询我

Python爬虫学习笔记总结(一)相关推荐

  1. python爬虫学习笔记 3.9 (了解参考:训练Tesseract)

    python爬虫学习笔记 3.9 (了解参考:训练Tesseract) 参考阅读:训练Tesseract 要使用 Tesseract 的功能,比如后面的示例中训练程序识别字母,要先在系统中设置一 个新 ...

  2. Python爬虫学习笔记 -- 爬取糗事百科

    Python爬虫学习笔记 -- 爬取糗事百科 代码存放地址: https://github.com/xyls2011/python/tree/master/qiushibaike 爬取网址:https ...

  3. python爬虫学习笔记3.2-urllib和request练习

    python爬虫学习笔记3.2-urllib和request练习 一.urllib练习 1.百度贴吧案例 需求 分析 手动测试查询流程 观察页面 分析特殊部分 https://tieba.baidu. ...

  4. python爬虫学习笔记 1.9 (Handler处理器 和 自定义Opener)

    python爬虫学习笔记 1.1(通用爬虫和聚焦爬虫) python爬虫学习笔记 1.2 ( HTTP和HTTPS ) python爬虫学习笔记 1.3 str和bytes的区别 python爬虫学习 ...

  5. python爬虫学习笔记2模拟登录与数据库

    前言 为了加入学校里面一个技术小组,我接受了写一个爬取学校网站通知公告的任务.这个任务比以前写的爬虫更难的地方在于,需要模拟登录才能获得页面,以及将得到的数据存入数据库. 本文按照日期来记录我完成任务 ...

  6. 一入爬虫深似海,总结python爬虫学习笔记!

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

  7. 一入爬虫深似海,总结python爬虫学习笔记! 1

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

  8. Python爬虫学习笔记:概念、知识和简单应用

    Python爬虫:概念.知识和简单应用 什么是爬虫? 使用的开发工具 一个简单的爬虫实例 Web请求过程分析 HTTP协议 请求头中的重要内容 响应头中的重要内容 请求方式 requests 安装 G ...

  9. python爬虫学习笔记一:网络爬虫入门

    参考书目 <python网络爬虫从入门到实践>唐松 第一章 网络爬虫入门 1.1 robots协议 举例:查看京东的robots协议 京东robots协议地址 User-agent: * ...

最新文章

  1. 程序猿想聊天 - 創問 4C 團隊教練心得(一)
  2. ThreadLocal介绍以及源码分析
  3. 正则表达式(括号)、[中括号]、{大括号}的区别
  4. laravel 创建自定义的artisan make命令来新建类文件
  5. SLAM Cartographer(3)定位和子图构建节点
  6. Java多线程基本概念
  7. 百度网盘kbengine - warring项目下载地址
  8. 吴恩达神经网络和深度学习-学习笔记-23-快速搭建你的第一个系统原型,然后迭代
  9. html编写在线打字通,金山打字在线练习版 怎么修改金山打字通打字速度?
  10. 基于WF4的新平台-流程格式转换架构
  11. 我要彻底搞懂SSD网络结构(1)VGG部分
  12. [转发] 我的一年中台实战录 - 何少甫
  13. 牛啊!微信支持发送彩色红包~~
  14. java 拼图游戏_Java 拼图游戏
  15. MJUPC-022_编程挑战系列赛第二十二场(以梦为“码“ “数“说未来)题解(C/C++代码)
  16. 安卓机用什么无线蓝牙耳机好?适合安卓机的蓝牙耳机推荐
  17. 2019年最实用的导航栏设计实践和案例分析全解
  18. 纪录大华的智能回调需要用到的事件列表
  19. kubeadmin安装高可用k8s集群
  20. spring入门总结

热门文章

  1. 【Python画图】绘制双坐标图
  2. Esp32快速接入腾讯云之智能冷空调扇实例
  3. photoshop位图与智能对象、矢量图形区别
  4. 嵌入式linux系统中常用的文件系统
  5. KEIL5 编译器AC6 使用RT-THREAD操作系统 使用组件CmBacktrace方法+addr2line使用
  6. 杰理之微信语音使用耳机录音下,录音出来的语音开头有1s左右的滋滋声【篇】
  7. android vivo手机 更换应用图标后没生效
  8. Linux文本编译工具VIM详解
  9. 猎豹MFC--备用对象和取消选定 画直尺
  10. 考虑了全半角的SubString