利用Python网络爬虫抓取韩寒博客推荐第一篇(urllib的简单使用与Beautifulsoup实战,i/o编程)

来源:互联网 发布:mac中打开exe文件 编辑:程序博客网 时间:2024/06/11 03:49

十艺半懂,不如一艺精通。实践才是真理

博主用的实例为韩寒博客的一片博文

(此方法只为实例演示请勿用于任何商业,否则后果自负)

此为该博客的连接

"http://blog.sina.com.cn/s/blog_4701280b0102wrup.html"

所用版本(python 3.6 BeautifulSoup4 4.6.0)

开发工具为Jupyter notebook (当然用其他的工具也行,如eclipse,notepad等)


Python3x 与Python2x 的urllib库发生了小的改动具体可以参考官方网站(https://docs.python.org/3.3/library/urllib.html  .。。。。。。。。https://docs.python.org/2/library/urllib.html)

Beautifulsoup


1、模块的导入

from urllib.request import urlopen
from bs4 import BeautifulSoup

#该文章的连接
url="http://blog.sina.com.cn/s/blog_4701280b0102wrup.html"
html=urlopen(url)#得到的是一个response对象
data=html.read()#读取html的内容
#data=data.decode("utf-8")#设置编码方式
print(html)
#print(data)

<http.client.HTTPResponse object at 0x0000000005AE6940>

2、用BeautifulSoup解析html

#需要注意的是以下两种解析方法

#html.parser只能解析普通的html网页
#html5lib 能解析用html5编写的网页

bsobj=BeautifulSoup(data,"html.parser")

#我们运行后发现html.parser不能全部解析次网页,所以下面用html5lib

bsobj_1=BeautifulSoup(data,"html5lib")
bsobj_1

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"/><title>写给那个茶水妹的《乘风破浪》诞生记_韩寒_新浪博客</title><meta content="写给那个茶水妹的《乘风破浪》诞生记_韩寒_新浪博客,韩寒,杂谈" name="keywords"/><meta content="写给那个茶水妹的《乘风破浪》诞生记_韩寒_新浪博客,韩寒," name="description"/><meta content="IE=EmulateIE7" http-equiv="X-UA-Compatible"/><meta content="format=html5; url=http://blog.sina.cn/dpool/blog/s/blog_4701280b0102wrup.html?vt=4" http-equiv="mobile-agent"/><meta content="format=wml; url=http://blog.sina.cn/dpool/blog/ArtRead.php?nid=4701280b0102wrup&amp;vt=1" http-equiv="mobile-agent"/><!--–[if lte IE 6]--><script type="text/javascript">try{document.execCommand("BackgroundImageCache", false, true);}catch(e){}</script>(当然没有全部贴出来,可以自己去看)
3、抓取标题
#抓取文章标题
#string是用来得到title标签的内容
at1=bsobj.title.string
at1

'写给那个茶水妹的《乘风破浪》诞生记_韩寒_新浪博客'
写入文档中
#将上面的html写入到文件中

#记住创建txt文件时,该文件的编码方式要改为UTF-8,先建立一个txt再另存为。

方法如下:


#不然后面用UTF-8写入的文档里面是乱码
path="F:\\python\\mypy\\hanhan.txt"
#打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。
#也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入
f=open(path,"a",encoding="utf-8")
f.write(at1)
f.close()

4、爬取博客文章的内容

#coding:utf-8
for txt in bsobj_1.find_all("p"):
    t=txt.string
    if(t==None):
        continue
    else:
        print(t)

(以下也是截取的前面部分)
遗产保护变成开发,“世界遗产”第1473篇·申遗大象在中国遭老师强奸案女童承认骗人,但孩为什么“迷你KTV”会成为消费日本年轻人讨厌吃水果的原因其实周琦不是保罗,不要期望值那么高看人下菜碟儿?日本皇太子和天皇王学进:我为老小区加装电梯献一亲情和高考不是“单选题”去年秋冬,ONE实验室作者生活在《乘风破浪》剧组中间,见证了拍摄过程,本文讲述的就是电影诞生的故事。这也是茶水妹和她的伙伴们,包括导演和主演们的故事。正是三百多个年轻人像候鸟一样来到亭林镇附近,带着他们年轻的人生,发生了一场年轻的化学反应,才造就了《乘风破浪》。2016年,上海,初秋,穿过城市的风带着南方特有的湿气。藏在每天涌入这座巨型城市的喧闹人潮当中,《乘风破浪》悄无声息地开拍了。没有开机仪式,连最为传统的两个基础步骤——烧香,以及揭开事先盖在摄影机上的红布——也被省略了。你甚至无法在现场的三百多张工作证上找到这部电影的名字,取而代之的是不用说也知道出自谁手的七个金色大字,“金秋十月农忙欢”。而第一项人生追求“不主动社交”则被他贯彻得更加彻底——开机仪式就被他视为不必要的社交活动之一。不过,如果有人据此推断导演是个难以相处的人,那么用不了多久,他就会发现自己完全搞错了。导演不是没有听过诸多电影前辈关于“刚开始拍一定要用高压政策把所有人震住”的劝诫,但显然从来没打算这么做。他看起来总是很轻松,“特别爱玩”,“特别能跑”。最开始,很多身经百战的剧组人像看西洋镜一样看着这个从不发火的导演,“从来没见过”,他们说,有人甚至试图用地域来解释这个问题,“是不是因为他是上海人啊?”又过了一段时间,他们惊讶地发现几个制片人说话的口气和神态都开始跟导演越来越像了。​理发店隔壁是寿衣店的小镇目的地永远是上海周边各种各样的小镇,韩寒兴致勃勃带大家去看老家亭林镇的老雕塑园,雕塑早荒废了,园子里全是疯长的野草;还有他小时候的房子旁边的一个烂尾楼,楼的底部蓄满了雨水,人都可以在里面游泳;早在佘山天坑还没被酒店项目看上以前,他就开车带大家去看过那个大坑……还有各种奇怪的路,奇怪的桥,奇怪的水塘,反正他总能找到一些莫名其妙却怪有趣的地方。起初大家惊讶于他对这些小镇的热情和熟悉程度,接着很快觉得路也有意思,桥也有意思,水塘也有意思。江南小村就像这群年轻人的游乐场,让他们可以自由而漫无目的地行驶在连接一个镇子与另一个镇子的乡村公路上,在车里聊天,聊天,聊天。


5、过滤文章中的多余信息
#我们从上面发现了一个问题就是前面几行不是文章的内容,那么我们需要过滤,过滤方法为设置一个参数i用来过滤计数,将字符串全部存入b字符串中
#下面为过滤方法
#coding:utf-8
b=""
i=0
for txt in bsobj_1.find_all("p"):
    t=txt.string
    i=i+1
    if(t==None):
        continue
    else:
        if(i>28):
            b=b+"\n"+t
        else:
            continue
print(b)

去年秋冬,ONE实验室作者生活在《乘风破浪》剧组中间,见证了拍摄过程,本文讲述的就是电影诞生的故事。这也是茶水妹和她的伙伴们,包括导演和主演们的故事。正是三百多个年轻人像候鸟一样来到亭林镇附近,带着他们年轻的人生,发生了一场年轻的化学反应,才造就了《乘风破浪》。2016年,上海,初秋,穿过城市的风带着南方特有的湿气。藏在每天涌入这座巨型城市的喧闹人潮当中,《乘风破浪》悄无声息地开拍了。没有开机仪式,连最为传统的两个基础步骤——烧香,以及揭开事先盖在摄影机上的红布——也被省略了。你甚至无法在现场的三百多张工作证上找到这部电影的名字,取而代之的是不用说也知道出自谁手的七个金色大字,“金秋十月农忙欢”。而第一项人生追求“不主动社交”则被他贯彻得更加彻底——开机仪式就被他视为不必要的社交活动之一。不过,如果有人据此推断导演是个难以相处的人,那么用不了多久,他就会发现自己完全搞错了。导演不是没有听过诸多电影前辈关于“刚开始拍一定要用高压政策把所有人震住”的劝诫,但显然从来没打算这么做。他看起来总是很轻松,“特别爱玩”,“特别能跑”。最开始,很多身经百战的剧组人像看西洋镜一样看着这个从不发火的导演,“从来没见过”,他们说,有人甚至试图用地域来解释这个问题,“是不是因为他是上海人啊?”又过了一段时间,他们惊讶地发现几个制片人说话的口气和神态都开始跟导演越来越像了。​理发店隔壁是寿衣店的小镇

6、直接将字符串b的内容写入文档

#大功告成了,美滋滋,直接写入文档
path="F:\\python\\mypy\\hanhan.txt"
#打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。
#也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入
f1=open(path,"a",encoding="utf-8")
f1.write(b)
f1.close()


此实例的开发工具最好用jupyter,网上有很多的安装教程,因为jupyter代码和运行结果非常直观。

还有的就是文章的抓取过滤,我开始是准备用beautifulsoup来过滤的,但是觉得那样太复杂,不符合代码简洁性,

后面我又想用正则表达式来过滤掉,但是那样的话要知道这些中文的统一编码的值,所以不合适,最后这种方法直观并且也比较简洁,大家都好理解。


不过我觉得应该还有好的方法,希望大佬们不吝赐教。


阅读全文
1 0