版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python爬虫快速入门2021/5/91目录二、准备知识一、引言三、网页请求四、网页解析五、开始采集六、如何应对反爬七、高级爬虫爬虫工作原理HTML+CSSPython基本知识找规律构建urlrequests库如何解析网页BeautifulSoupre库的使用条件、循环语句try。。。Except异常处理。数据存储控制访问频率伪装装成浏览器使用代理IPselenium+Firefox(36版)抓包应对动态网页2021/5/92引言爬虫能做什么?
微博最近有啥热门话题淘宝京东上某商品价格变动邮箱通知女/男神最新动态谁点赞最活跃BBS抢沙发社交网络分析….
2021/5/93引言爬虫能做什么一句话,只要浏览器有的,你都可以抓可以爬2021/5/94引言爬虫好学吗?>>>from
math
import
pow>>>YouJoinUs
=
{‘is’:True}>>>If
YouJoinUs[‘is’]:>>>
result
=
pow(1.01,365)>>>
print(result)37.7834简单的道理2021/5/95目录一、引言三、网页请求四、网页解析五、开始采集六、如何应对反爬七、高级爬虫爬虫工作原理HTMLPython基本知识找规律构建urlrequests库如何解析网页BeautifulSoupre库的使用条件、循环语句try。。。Except异常处理。数据存储控制访问频率伪装装成浏览器使用代理IPselenium+Firefox(36版)抓包应对动态网页二、准备知识2021/5/96爬虫工作原理蓝色线条:发起请求(request)红色线条:返回响应(response)2021/5/97HTML标签访问Python中文社区/zimei返回HTML文件如下:浏览器显示效果2021/5/98Python基本知识
基本数据类型(str,list,tuple,set,dict)循环语句(for循环)条件语句(if
else
while)表达式(如age
=
20)2021/5/99字符串str字符串:单(双、三)引号及其夹住的字符>>>String
=
‘我叫邓旭东’>>>String[2:5]邓旭东2021/5/910列表list[1,
2,
3,
4,
5][‘1’,
’2’,
’3’,
’4’,
’5’][‘a’,
’b’,
’c’,
’d’][(1,2),(1,2)]…列表中的元素可以是字符串,数字,元组,字典,集合下面的写法是不对的[a,
b,
c]
(除非a,b,c是变量)2021/5/911元组tuple(1,2,3,4)(’1’,
‘2’,
‘3’,
‘4’)
(‘a’,
’b’,
’c’,
’d’)2021/5/912集合set{‘a’,
’b’,
’c’}集合是不重复的元素组成的一个基本数据类型。2021/5/913字典dict>>>Dict
=
{‘name’:
‘邓旭东’,
‘age’:
26,
‘gender’:
‘male’}在大括号中,数据成对存储,冒号左边是键(key),冒号右边是值(value)>>>Dict[‘age’]262021/5/914for循环>>>for
x
in
[‘1’,
’2’,
’3’]:>>>
print(x)1232021/5/915目录一、引言三、网页请求四、网页解析五、开始采集六、如何应对反爬七、高级爬虫爬虫工作原理HTMLPython基本知识找规律构建urlrequests库如何解析网页BeautifulSoupre库的使用条件、循环语句try。。。Except异常处理。数据存储控制访问频率伪装装成浏览器使用代理IPselenium+Firefox(36版)抓包应对动态网页二、准备知识2021/5/916找规律构建url通过点击翻看同一个目录下的多个页面,发现规律,定制url2021/5/917发现规律定制url2021/5/918发现规律定制url这里的url规律是页码数减1后乘以202021/5/919构建网址Base_url
=
‘/tag?start={num}’for
page
in
range(1,94,1):
Num
=
page
-
1
url
=
Base_url.format(num=Num*20)
print(url)‘/tag?start=0’‘/tag?start=20’‘/tag?start=40’……2021/5/920requests库
Requests
is
an
elegant
and
simple
HTTP
library
forPython,
built
for
human
beings.Requests是一个优雅简洁的PythonHTTP库,给人类使用。2021/5/921requests常用方法最普通的访问url
=
‘/u/1562c7f164’r
=
requests.get(url)伪装成浏览器的访问Headers
=
{‘User-Agent’:
’Mozilla/5.0(Macintosh;IntelMacOSX10_12_3)AppleWebKit/537.36(KHTML,likeGecko)Chrome/56.0.2924.87Safari/537.36’}r
=
requests.get(url,headers
=
Headers)2021/5/922requests常用方法使用cookie访问Cookie
=
{‘Cookie’:
’UM_distinctid=15ab64ecfd6592-0afad5b368bd69-1d3b6853-13c680-15ab64ecfd7b6;remember_user_token=W1sxMjEzMTM3XSwiJDJhJDEwJHhjYklYOGl2eTQ0Yi54WC5seVh2UWUiLCIxNDg5ODI2OTgwLjg4ODQyODciXQ%3D%3Dac835770a030c0595b2993289e39c37d82ea27e2;CNZZDATA1258679142=559069578-1488626597-https%253A%252F%252F%252F%7C1489923851’}r=requests.get(url,cookies=cookies)2021/5/923requests常用方法>>>r.text
u‘[{“repository”:{“open_issues”:0,“url”:“/...#返回请求的状态>>>r.status_code
#(4开头客户端问题,5开头服务器问题)200
2021/5/924目录一、引言三、网页请求四、网页解析五、开始采集六、如何应对反爬七、高级爬虫爬虫工作原理HTMLPython基本知识找规律构建urlrequests库如何解析网页BeautifulSoupre库的使用条件、循环语句try。。。Except异常处理。数据存储控制访问频率伪装装成浏览器使用代理IPselenium+Firefox(36版)抓包应对动态网页二、准备知识2021/5/925如何解析网页火狐Firebug/谷歌的开发者工具BeaufifulSoup/re库2021/5/926Python基本知识2021/5/927BeautifulSoup>>>bsObj
=
BeautifulSoup(html,“html.parser”)格式化输出
bsObj对象的内容
4567891011html="""<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"name="dromouse"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1"><!--Elsie--></a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p>"""两种主要的对象:
Tag、NavigableString2021/5/928tag对象>>>bsObj.title‘<title>TheDormouse‘sstory</title>’>>>bsObj.head‘<head><title>TheDormouse‘sstory</title></head>’>>>bsObj.a‘<aclass="sister"href="/elsie"id="link1"><!--Elsie--></a>’注意:它查找的是在所有内容中的第一个符合要求的标签,如果要查询所有的标签,这种方法不奏效2021/5/929BeautifulSoup
–遍历文档树>>>#直接子节点.contents>>>bsObj.head.contents
#输出的为列表[‘<title>TheDormouse‘sstory</title>’]>>>bsObj.head.contents[0]从列表中取出子节点‘<title>TheDormouse'sstory</title>’2021/5/930BeautifulSoup
–遍历文档树>>>#直接子节点.children>>>bsObj.head.children
#返回生成器,可以迭代取出来<listiteratorobjectat0x7f71457f5710>
>>>forchildinsoup.body.children:>>>
printchild
‘<pclass=“title”name=“dromouse”><b>TheDormouse‘sstory</b></p>’‘<pclass=“story”>Onceuponatimetherewerethreelittlesisters;andtheirnameswere’‘<aclass=“sister”href=“/elsie”id=“link1”><!--Elsie--></a>’‘<aclass=“sister”href=“/lacie”id=“link2”>Lacie</a>and’‘<aclass=“sister”href=“/tillie”id=“link3”>Tillie</a>’‘andtheylivedatthebottomofawell.</p><pclass="story">...</p>’2021/5/931Tag对象>>>#Attrs
<pclass="title"name="dromouse"><b>TheDormouse'sstory</b></p>>>>bsObj.p.attrs
{‘class’:‘title’,‘name’:‘dromouse’}>>>bsObj.p.attrs
[‘class’]‘title’>>>bsObi.p.attrs.get(‘class’)'title’2021/5/932NavigableString对象>>>#获取标签内部的文字>>>bsObj.p.stringTheDormouse'sstory2021/5/933find
/find_allfind_all(name,attrs)
得到的所有符合条件的结果,返回的是列表格式>>>bsObj.findall(‘a’)[<aclass=“sister”href=“/elsie”id=“link1”><!--Elsie--></a>,<aclass=“sister”href=“/lacie”id=“link2”>Lacie</a>,<aclass=“sister”href=“/tillie”id=“link3”>Tillie</a>]>>>bsObj.findall(‘a’,{‘href’:‘/elsie’})[‘<aclass=“sister”href=“/elsie”id=“link1”><!--Elsie--></a>’]2021/5/934find(name,attrs)
只返回第一个符合条件的结果,所以soup.find()后面可以直接接.text或者get_text()来获得标签中的文本。>>>bsObj.findall(‘a’)<aclass=“sister”href=“/elsie”id=“link1”><!--Elsie--></a>2021/5/935re库-正则表达式html
=
‘<html><div><span>我叫邓旭东</span><span>今年27岁</span></div>
</html>’BeautifulSoup获取html文件中的邓旭东和27,需要这样>>>bsObj=BeautifulSoup(html,
’html.parser’)
>>>Contents
=
bsObj.findall(‘span’)>>>Contents[0]<span>我叫邓旭东</span>>>>Contents[0].string我叫邓旭东>>>Contents[0].string[2:]邓旭东>>>Contents[1]<span>今年27岁</span>>>>Contents[1].string今年27岁>>>Contents[1].string[2:-2]272021/5/936re库-正则表达式在爬虫的应用html
=
‘<html><div><span>我叫邓旭东</span><span>今年27岁</span></div>
</html>’>>>Import
re>>>pattern
=
pile(r’<span>我叫(.*?)</span><span>今年(.*?)岁</span>’)>>>result
=
re.findall(pattern,
html)>>>result(‘邓旭东’,’27’)2021/5/937re正则表达式常用匹配规则.匹配任意字符(“\n”除外)a.c
abc\d数字0-9
a\dc
a1c
*匹配前一个字符的0或无限次ab*c
ac或abc或abbc+匹配前一个字符的1或无限次ab+
c
abc或abbc?匹配前一个字符0或1次abc?ab或abc2021/5/938re库方法pattern
=
pile(string)
#以下为匹配所用函数re.findall(pattern,string)返回列表re.match(pattern,string)从string的开头匹配,匹配成功立即返回pattern的内容,不再匹配string剩余部分re.search(pattern,string)从string全部匹配,如果匹配不成功返回none,匹配成功返回一个或多个匹配内容re.split(pattern,string)
re.sub(pattern,repl,string)2021/5/939目录一、引言三、网页请求四、网页解析五、开始采集六、如何应对反爬七、高级爬虫爬虫工作原理HTMLPython基本知识找规律构建urlrequests库如何解析网页BeautifulSoupre库的使用条件、循环语句
try。。。Except异常处理数据存储控制访问频率伪装装成浏览器使用代理IPselenium+Firefox(36版)抓包应对动态网页二、准备知识2021/5/940for语句用来循环,重复爬虫动作1、遍历网址,依次对网址发送请求2、解析网页时,返回的是列表或生成器的对象,通过for遍历对象中的元素并对每个元素进行操作2021/5/941if条件判断语句用来解决爬虫过程中哪些要,哪些不要的问题哪些执行,哪些不执行的问题2021/5/942try。。。Except异常处理。情景:你设计的程序在完美情况下当然不会出错,但现实是经常有意外出现,一遇到问题就程序就退出运行。解决办法:try
except异常处理,增强你爬虫的健壮性,解决遇到问题程序停止2021/5/943数据存储初级的爬虫,大多都是为了获得文本数据,只需要用csv、txt文件存储即可>>>import
csv>>>csvFile
=
open(‘/apple/usr/python/data.csv’,’a+’,newline=‘’,encoding=‘utf-8’)>>>writer
=
csv.writer(csvFile)>>>writer.writerow((‘colum1’,’colum2’,’colum3’))…>>>writer.writerow((colum1,colum2,colum3))…>>>csvFile.close()2021/5/944数据存储>>>f
=
open(‘/apple/usr/python/data.txt’,’a+’,encoding=‘utf-8’)>>>f.write(‘sssss’)…>>>f.close也可以使用:>>>with
open((‘/apple/usr/python/data.txt’,’a+’,encoding=‘utf-8’)
as
f:>>>
f.write(‘sssss’)2021/5/945开始采集数据2021/5/946目录一、引言三、网页请求四、网页解析五、开始采集六、如何应对反爬七、高级爬虫爬虫工作原理HTMLPython基本知识找规律构建urlrequests库如何解析网页BeautifulSoupre库的使用条件、循环语句try。。。Except异常处理数据存储控制访问频率伪装装成浏览器使用代理IPselenium+Firefox(36版)抓包应对动态网页二、准备知识2021/5/947如何应对反爬2021/5/948伪装成浏览器2021/5/949控制访问频率
2021/5/950使用代理IP2021/5/951目录一、引言三、网页请求四、网页解析五、开始采集六、如何应对反爬七、高级爬虫爬虫工作原理HTMLPython基本知识找规律构建urlrequests库如何解析网页BeautifulSoupre库的使用条件、循环语句try。。。Except异常处理数据存储控制访问频率伪装装成浏览器使用代理IPselenium+Firefox(36版)抓包应对动态网页二、准备知识2021/5/952什么是动态网页2021/5/953
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《数列基础概念》课件
- 脂质代谢紊乱的临床护理
- 家族性良性天疱疮的临床护理
- IgA天疱疮的临床护理
- 鼻腔及鼻窦骨瘤的健康宣教
- 化学电源 课件zhp
- 孕妇小腿浮肿的健康宣教
- 稻农皮炎的临床护理
- 心源性休克的护理
- 《机械制造基础》课件-05篇 第四单元 电火花加工
- 北京市东城区2022-2023学年八年级上学期期末统一检测 数学试卷 (解析版)
- 智能手机使用培训课件
- 2023年中国烟草总公司河北省公司考试真题及答案
- 生态环境第三方服务项目应急预案
- 空中热气球模板
- 2024山东广播电视台招聘18人历年高频考题难、易错点模拟试题(共500题)附带答案详解
- 古风店铺创业计划书
- 国家电网招聘考试电工类真题及答案近年合集
- 铁路工务系统养路工岗位标准样本
- 水利施工安全培训课件
- TSTIC 110069-2022 曳引驱动乘客电梯
评论
0/150
提交评论