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

发布时间 - 2026-01-11 01:56:19    点击率:

本文主要给大家介绍的是关于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 "------------------------------"

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

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

接下来就是通过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()

差点忘了效果图

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

总结

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


# python爬取网页数据  # python爬取网页  # 的是  # 每页  # 这个问题  # 大佬  # 不太懂  # 几个  # 就会  # 会有  # 相关内容  # 我觉得  # 第一个  # 是这样  # 其他的  # 跟我  # 一遍  # 这部  # 要注意  # 给大家  # 可以看到  # 问题是 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  如何用PHP快速搭建高效网站?分步指南  如何在香港服务器上快速搭建免备案网站?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  如何在IIS中配置站点IP、端口及主机头?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何在IIS管理器中快速创建并配置网站?  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  如何在Tomcat中配置并部署网站项目?  如何在阿里云通过域名搭建网站?  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  JavaScript如何实现继承_有哪些常用方法  如何正确选择百度移动适配建站域名?  Laravel怎么在Blade中安全地输出原始HTML内容  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Swift中循环语句中的转移语句 break 和 continue  如何用AWS免费套餐快速搭建高效网站?  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  奇安信“盘古石”团队突破 iOS 26.1 提权  香港服务器选型指南:免备案配置与高效建站方案解析  Laravel如何创建自定义Facades?(详细步骤)  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  如何在万网自助建站平台快速创建网站?  怎么用AI帮你为初创公司进行市场定位分析?  bootstrap日历插件datetimepicker使用方法  php结合redis实现高并发下的抢购、秒杀功能的实例  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  如何在不使用负向后查找的情况下匹配特定条件前的换行符  成都网站制作公司哪家好,四川省职工服务网是做什么用?  ,在苏州找工作,上哪个网站比较好?  如何在Windows服务器上快速搭建网站?  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  图册素材网站设计制作软件,图册的导出方式有几种?  详解MySQL数据库的安装与密码配置  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  简单实现Android验证码  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Laravel如何实现多对多模型关联?(Eloquent教程)  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  香港网站服务器数量如何影响SEO优化效果?  Laravel如何记录自定义日志?(Log频道配置)