利用python爬取散文网的文章实例教程


Posted in Python onJune 18, 2017

本文主要给大家介绍的是关于python爬取散文网文章的相关内容,分享出来供大家参考学习,下面一起来看看详细的介绍:

效果图如下:

利用python爬取散文网的文章实例教程

配置python 2.7

bs4

 requests

安装 用pip进行安装 sudo pip install bs4

sudo pip install requests

简要说明一下bs4的使用因为是爬取网页 所以就介绍find 跟find_all

find跟find_all的不同在于返回的东西不同 find返回的是匹配到的第一个标签及标签里的内容

find_all返回的是一个列表

比如我们写一个test.html 用来测试find跟find_all的区别。

内容是:

<html>
<head>
</head>
<body>
<div id="one"><a></a></div>
<div id="two"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >abc</a></div>
<div id="three"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >three a</a><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >three a</a><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >three a</a></div>
<div id="four"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >four<p>four p</p><p>four p</p><p>four p</p> a</a></div>
</body>
</html>

然后test.py的代码为:

from bs4 import BeautifulSoup
import lxml

if __name__=='__main__':
 s = BeautifulSoup(open('test.html'),'lxml')
 print s.prettify()
 print "------------------------------"
 print s.find('div')
 print s.find_all('div')
 print "------------------------------"
 print s.find('div',id='one')
 print s.find_all('div',id='one')
 print "------------------------------"
 print s.find('div',id="two")
 print s.find_all('div',id="two")
 print "------------------------------"
 print s.find('div',id="three")
 print s.find_all('div',id="three")
 print "------------------------------"
 print s.find('div',id="four")
 print s.find_all('div',id="four")
 print "------------------------------"

运行以后我们可以看到结果当获取指定标签时候两者区别不大当获取一组标签的时候两者的区别就会显示出来

利用python爬取散文网的文章实例教程

所以我们在使用时候要注意到底要的是什么,否则会出现报错

接下来就是通过requests 获取网页信息了,我不太懂别人为什么要写heard跟其他的东西

我直接进行网页访问,通过get方式获取散文网几个分类的二级网页然后通过一个组的测试,把所有的网页爬取一遍

def get_html():
 url = "https://www.sanwen.net/"
 two_html = ['sanwen','shige','zawen','suibi','rizhi','novel']
 for doc in two_html:
 i=1
  if doc=='sanwen':
  print "running sanwen -----------------------------"
  if doc=='shige':
  print "running shige ------------------------------"
  if doc=='zawen':
  print 'running zawen -------------------------------'
  if doc=='suibi':
  print 'running suibi -------------------------------'
  if doc=='rizhi':
  print 'running ruzhi -------------------------------'
  if doc=='nove':
  print 'running xiaoxiaoshuo -------------------------'
 while(i<10):
 par = {'p':i}
 res = requests.get(url+doc+'/',params=par)
 if res.status_code==200:
  soup(res.text)
  i+=i

这部分的代码中我没有对res.status_code不是200的进行处理,导致的问题是会不显示错误,爬取的内容会有丢失。然后分析散文网的网页,发现是www.sanwen.net/rizhi/&p=1

p最大值是10这个不太懂,上次爬盘多多是100页,算了算了以后再分析。然后就通过get方法获取每页的内容。

获取每页内容以后就是分析作者跟题目了代码是这样的

def soup(html_text):
 s = BeautifulSoup(html_text,'lxml')
 link = s.find('div',class_='categorylist').find_all('li')
 for i in link:
 if i!=s.find('li',class_='page'):
 title = i.find_all('a')[1]
 author = i.find_all('a')[2].text
 url = title.attrs['href']
 sign = re.compile(r'(//)|/')
 match = sign.search(title.text)
 file_name = title.text
 if match:
 file_name = sign.sub('a',str(title.text))

获取标题的时候出现坑爹的事,请问大佬们写散文你标题加斜杠干嘛,不光加一个还有加两个的,这个问题直接导致我后面写入文件的时候文件名出现错误,于是写正则表达式,我给你改行了吧。

最后就是获取散文内容了,通过每页的分析,获得文章地址,然后直接获取内容,本来还想直接通过改网页地址一个一个的获得呢,这样也省事了。

def get_content(url):
 res = requests.get('https://www.sanwen.net'+url)
 if res.status_code==200:
 soup = BeautifulSoup(res.text,'lxml')
 contents = soup.find('div',class_='content').find_all('p')
 content = ''
 for i in contents:
 content+=i.text+'\n'
 return content

最后就是写入文件保存ok

f = open(file_name+'.txt','w')

 print 'running w txt'+file_name+'.txt'
 f.write(title.text+'\n')
 f.write(author+'\n')
 content=get_content(url) 
 f.write(content)
 f.close()

三个函数获取散文网的散文,不过有问题,问题在于不知道为什么有些散文丢失了我只能获取到大概400多篇文章,这跟散文网的文章是差很多很多的,但是确实是一页一页的获取来的,这个问题希望大佬帮忙看看。可能应该做网页无法访问的处理,当然我觉得跟我宿舍这个破网有关系

f = open(file_name+'.txt','w')
 print 'running w txt'+file_name+'.txt'
 f.write(title.text+'\n')
 f.write(author+'\n')
 content=get_content(url) 
 f.write(content)
 f.close()

差点忘了效果图

利用python爬取散文网的文章实例教程

能会出现timeout现象吧,只能说上大学一定要选网好的啊!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python修改注册表终止360进程实例
Oct 13 Python
解决Mac下首次安装pycharm无project interpreter的问题
Oct 29 Python
Python爬取视频(其实是一篇福利)过程解析
Aug 01 Python
git查看、创建、删除、本地、远程分支方法详解
Feb 18 Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 Python
Django单元测试中Fixtures用法详解
Feb 25 Python
Python语法垃圾回收机制原理解析
Mar 25 Python
Django模板获取field的verbose_name实例
May 19 Python
python读取图像矩阵文件并转换为向量实例
Jun 18 Python
Python开发工具Pycharm的安装以及使用步骤总结
Jun 24 Python
基于python定位棋子位置及识别棋子颜色
Jul 26 Python
Python 图片添加美颜效果
Apr 28 Python
Python3中简单的文件操作及两个简单小实例分享
Jun 18 #Python
python实现各进制转换的总结大全
Jun 18 #Python
Mac 上切换Python多版本
Jun 17 #Python
利用python实现xml与数据库读取转换的方法
Jun 17 #Python
用python写个自动SSH登录远程服务器的小工具(实例)
Jun 17 #Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
Jun 16 #Python
Python生成随机密码的方法
Jun 16 #Python
You might like
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
PHP的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
PHP使用PDO调用mssql存储过程的方法示例
2017/10/07 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
2019/01/15 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
js调用css属性写法
2013/09/21 Javascript
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
node.js中的fs.write方法使用说明
2014/12/15 Javascript
JS实现3D图片旋转展示效果代码
2015/09/22 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
2016/01/12 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
AngularJS 表达式详解及实例代码
2016/09/14 Javascript
React中jquery引用的实现方法
2017/09/12 jQuery
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
Python实现定时任务
2017/02/08 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
解决pip安装的第三方包在PyCharm无法导入的问题
2020/10/15 Python
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
兰芝美国网上商城:购买LANEIGE睡眠面膜等
2017/06/30 全球购物
高级人员简历的自我评价分享
2013/11/03 职场文书
网络信息管理员岗位职责
2014/01/05 职场文书
教师校本培训方案
2014/02/26 职场文书
组织生活会表态发言材料
2014/10/17 职场文书
优秀团员自我评价
2015/03/10 职场文书
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python