python爬⾍爬取⽂章_爬⾍实战【1】使⽤python爬取博客园的
某⼀篇⽂章
第⼀次实战,我们以博客园为例。
Cnblog是典型的静态⽹页,通过查看博⽂的源代码,可以看出很少js代码,连css代码也⽐较简单,很适合爬⾍初学者来练习。
博客园的栗⼦,我们的⽬标是获取某个博主的所有博⽂,今天先将第⼀步。
第⼀步:已知某⼀篇⽂章的url,如何获取正⽂?
举个栗⼦,我们参考‘农民伯伯’的博客⽂章吧,哈哈。他是我关注的⼀个博主。倪妮父亲
这是他的⼀篇名为“【读书笔记】长尾理论”的⽂章。
我们如果想要存储这篇⽂章,需要保存的内容⾸先是⽂章的标题,再就是⽂章的正⽂。
⽂章的标题怎么获取的?
先看⼀下⽂章标题在⽹页源代码中的位置是如何的。
可以看出来,标题的⽂字内容是包含在⼀个a标签⾥⾯的,我们将这个标签打印出来:
那个标签具有id属性,值为“cb_post_title_url”,具有class属性,值为“postTitle2”,还具有⼀个href属性,指向了这篇⽂章的url。
郑浩南 三级
这个标签应该是⽐较⽅便定位的,所以⽂章标题我们能够很快到。
代码如下:
quest.urlopen(req)
凤整容后照片对比
html_ad().decode(‘utf-8‘)
title_pattern=r‘()(.*)()‘title_match=re.search(title_pattern,html_page)
任务栏变宽了怎么办
title=up(2)#print(title)
上⾯的title就是我们想要爬取的这篇⽂章的代码
⽂章的正⽂如何获取呢?
来看⼀下⽂章的结构,正⽂的所有内容都在⼀个div标签⾥⾯,但是这个div中存在很多其他标签,并不是直接⼀堆⽂字放在div标签⾥⾯。⽐如有很多
标签。
如何获取所有的内容呢?
我猜测,只要将所有>
div_pattern=r‘
(.*)
‘div_match=re.search(div_pattern,html_page)
div=up(1)#print(div)
result_pattern=r‘>(.*)
result=‘‘
for i inresult_match:
result+=str(i)print(result)
遗憾的是,失败了。。。打印出来的内容,不仅包含⽂字,还有⼀些包含在内的标签,⽐如。
⽤正则表达式的缺陷这⾥就体现出来了。。我们还是⽤BeautifulSoup来解析⽂档吧。
使⽤BeautifulSoup解析内容的⽅法,请回顾我所写的爬⾍⼊门的⽂章。
获取正⽂所在的div标签的代码如下:
from bs4 importBeautifulSoup
soup=BeautifulSoup(html_page,‘html.parser‘)#print(soup.prettify())白羊歌词
div=soup.find(id="post_body")#)
_text())
湾区指的是哪些地区哈哈,⼤功告成,我们获得了正⽂的内容。为了便于保存,我们将⽂章保存到当前⽬录下。filename=title+‘.txt‘with open(filename,‘w‘,encoding=‘utf-8‘) as f:
f.)
OK了,⾄此为⽌,我们获取并保存了这篇⽂章。
来,所有的代码如下所⽰:
quest.urlopen(req)
html_ad().decode(‘utf-8‘)
title_pattern=r‘()(.*)()‘title_match=re.search(title_pattern,html_page)
title=up(2)#print(title)
‘‘‘div_pattern=r‘
(.*)
div_match=re.search(div_pattern,html_page)
div=up(1)
#print(div)
result_pattern=r‘>(.*)
result_match=re.findall(result_pattern,div)
result=‘‘
for i in result_match:
result+=str(i)
print(result)‘‘‘soup=BeautifulSoup(html_page,‘html.parser‘)#print(soup.prettify()) div=soup.find(id="post_body")#)
_text())
filename=title+‘.txt‘with open(filename,‘w‘,encoding=‘utf-8‘) as f:
f.)