前言

还记得是大学2年级的时候,偶然之间看到了学长在学习python;我就坐在旁边看他敲着代码,感觉很好奇。感觉很酷,从那之后,我就想和学长一样的厉害,就想让学长教我,请他吃了一周的饭,他答应了。从此,我踏上了python编程的道路。在那之前,我成天到晚都是在打lol;但是从那天之后,几乎很少很少了。

然而到如今,这一学就是2年,我已经不再是一名小白。是的,我爱上了编程,爱上了python。如今,人工智能的时代已经来临,作为它的首选语言 python。我很自豪,今天给大家分享一下我当初学习爬虫的心得体会。

正文

〇. 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(url, data=None, [timeout, ]***, cafile=None, capath=None, cadefault=False, context=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打开开发者模式)如下:

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

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

from urllib import requesturl = '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 requestfrom bs4 import BeautifulSoupurl = 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标签的stringfor title in titles: print(title.string)

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

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

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

1 对.txt文件的操作

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

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None))Open file and return a corresponding file object. If the file cannot be opened, an OSErroris raised.

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

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

# -*- coding:utf-8 -*-from urllib import requestfrom bs4 import BeautifulSoupurl = 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 timefrom urllib import requestfrom bs4 import BeautifulSoupimport reurl = 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())

运行结果

转载于:https://www.cnblogs.com/qingdeng123/p/10517242.html

一入爬虫深似海,从此游戏是路人!总结我的python爬虫学习笔记!相关推荐

  1. 一入IT深似海 从此妹子为路人

    一入IT深似海,从此妹子为路人.....传者网的那个什么 在我还不知道程序员是什么的时候就选择了编程这条道路,直到现在我不得不说,程序对我吸引真的很大,我喜欢写代码,因为能给人带来成就感.记得当年老师 ...

  2. 一入侯门深似海,从此萧郎是路人

    <赠婢> 唐:崔郊 公子王孙逐后尘,绿珠垂泪滴罗巾. 一入侯门深似海,从此萧郎是路人. 诗的首两句应该换个顺序翻译,绿珠是美女佳人的代称,泛指容貌姣好的女子,可是这么美丽的女子却在偷偷的哭 ...

  3. 一入编码深似海,在达观数据做程序员是怎样一种体验?

    在技术浪潮一波接一波推动人类社会前进的历史进程当中,程序员始终是站在浪尖的群体.2014年起,把每年10月24日(2^10)定义为程序员节.这可能是唯一一个与数字紧密相关的节日--也体现了这个节日的含 ...

  4. 您为了什么而学?【一入红尘深似海 勿负天下有心人】

    踏入凡尘皆天意,何论成败论英雄.徒步跌撞几十载,辗转功成犹可期. 莫问天下谁有心,功臻造化皆回首.以往征途一心否,成负天下不负君. 世间本就无难事,唯有敢于攀登者.纸上谈兵不可为,欲成由心是为谁? 坎 ...

  5. 「一入 Java 深似海 」系列课程

    第一期 「一入 Java 深似海 」系列课程 - 第一期 第一节:Java 语言基础 转载于:https://www.cnblogs.com/wangjunwei/p/10393306.html

  6. Java实现小猪佩奇_一入java深似海(1-4期 完整版)

    『课程目录』: ├─第1期 │      开篇 一入 Java 深似?,从此"劝退"成必然.mp4 │      第1节:Java语言基础.mp4 │      第2节:Java面 ...

  7. 一入Java 深似海

    「一入 Java 深似海 」系列是小马哥 2019 年在 SegmentFault 平台发布的全新付费课程,内容围绕 Java 生态体系而展开,从编程语言.编程模型.代码设计,框架实现以及架构实践等, ...

  8. 数赢云CTO『朱炜』丨一入创业深似海……

    关注"Ai时速"  智慧赢未来!  Ai时速  因着Ai的美好:用激情和速度体验Ai时代! 职业创业|PK分享|进化成长 朱炜 写在前面 " 生命在于折腾,技术改变未来! ...

  9. 一入爬虫深似海,从此“节操”是路人!熬夜总结的python爬虫资料

    Python爬虫这个词出现在生活中的频率真是越来越高,那你知道Python爬虫都可以做什么吗?那今天我带大家了解一下Python爬虫可以做什么. Python爬虫就是网络爬虫,通俗的讲就是通过程序去获 ...

  10. 一入爬虫深似海,反爬技术你知多少?

    文章目录 1. 习惯性唠叨点啥 2. 什么造就了爬虫 3. 为什么要反爬虫 4. 反反爬虫的权重 5. 高级的反爬手段 6. 爬虫的发展方向 7. 致谢 1. 习惯性唠叨点啥   最近很久一段时间没有 ...

最新文章

  1. python3官方文档 中文-Python 3.7 官方文档中文翻译召集
  2. JS 对象机制深剖——new 运算符
  3. php pdo.dll不存在,php pdo.dll没有找到怎么办
  4. 国内有哪些自然语言处理(NLP)专业比较厉害的985高校?
  5. c语言文件归并问题_C语言 | 选择法对10个数排序
  6. ajax和rxjs,javascript – RxJS 5 Observable和Angular2 http:调用ajax一次,保存结果,随后的ajax调用使用缓存结果...
  7. C中不安全的函数以解决办法汇总
  8. jQuery+toggle
  9. html2canvas 在qq保存失败_QQ的截图功能,没想到这么好用!
  10. Vue.js 学习笔记 十一 自定义指令
  11. linux 脚本 ps grep,linux中PS命令和grep命令以及信号处理函数
  12. 携程合体去哪儿,与途牛度假旅游市场争高下
  13. highcharts 开发笔记
  14. 【历史上的今天】6 月 6 日:世界 IPv6 启动纪念日;《俄罗斯方块》发布;小红书成立
  15. SQL语法INSERT INTO_大数据培训
  16. Hudi-Flink SQL实时读取Hudi表数据
  17. RabbitMQ系列——Rabbitmq Plugin configuration unchanged. 解决方案
  18. 固定表头和第一列、内容可滚动的table表格
  19. 软件测试工作怎样修改本机IP,如何在命令行下更改IP地址
  20. 学会了这些!你就是天下间的美容高手

热门文章

  1. 相亲婚恋交友平台小程序系统开发
  2. Excel中合并单元格拆分后,填上相同数据
  3. Linux——获取系统信息
  4. 手把手教你个性化修改ChatGPT账号头像,纯干货,超简单
  5. 微软实现Win8设备销售量4亿的5个机密
  6. HDU 5879 Cure
  7. Typora使用系统安装的字体
  8. python 线性回归回归 缺失值 忽略_机器学习 第3篇:数据预处理(使用插补法处理缺失值)...
  9. HCIE-Big Data 笔记
  10. java a3 套打印_Java输出打印工具类封装的实例