使用python爬取散文网的文章

使用python爬取散文网的文章
image.png

配置python 2.7

    bs4    requests

登录后复制

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

sudo pip install requests

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

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

立即学习“Python免费学习笔记(深入)”;

find_all返回的是一个列表

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

登录后复制

 

 

登录后复制

然后test.py的代码为:

from bs4 import BeautifulSoupimport lxmlif __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爬取散文网的文章
image.png

所以我们在使用时候要注意到底要的是什么,否则会出现报错
接下来就是通过requests 获取网页信息了,我不太懂别人为什么要写heard跟其他的东西
我直接进行网页访问,通过get方式获取散文网几个分类的二级网页然后通过一个组的测试,把所有的网页爬取一遍

def get_html():  url = ""  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(''+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+''    return content

登录后复制

 

 

登录后复制登录后复制登录后复制

最后就是写入文件保存ok

   f = open(file_name+'.txt','w')      print 'running w txt'+file_name+'.txt'      f.write(title.text+'')      f.write(author+'')      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+'')      f.write(author+'')      content=get_content(url)           f.write(content)      f.close()

登录后复制

 

差点忘了效果图

使用python爬取散文网的文章代码虽乱,我却从未止步

以上就是使用python爬取散文网的文章的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2268828.html

(0)
上一篇 2025年2月27日 10:53:51
下一篇 2025年2月18日 13:28:29

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 现在人们都学什么编程语言

    当下最热门的编程语言是:Python:机器学习、数据科学、Web 开发JavaScript:Web 开发Java:企业应用程序、安卓应用程序、游戏C#:桌面应用程序、Web 服务、游戏C++:操作系统、游戏、嵌入式系统 当下最热门的编程语言…

    2025年2月27日
    200
  • 那种计算机语言最流行好学

    对于初学者,Python和Java是流行且易学的计算机编程语言。Python因其简洁的语法和丰富的库而著称,而Java因其面向对象特性和跨平台能力而闻名。选择最适合自己需要的语言。 最流行且易学的计算机编程语言 在众多计算机编程语言中,Py…

    2025年2月27日
    200
  • 世界上一共有多少种编程语言

    世界现有约 800-1000 种编程语言,可根据范例分类为:面向过程面向对象函数式逻辑式脚本式根据 TIOBE 指数,最流行的语言包括 Python、C、Java、C++ 等。新语言不断创建,以满足特定需求,选择语言应根据项目需求、语言范例…

    2025年2月27日
    200
  • Python爬取qq音乐的过程实例

    一、前言   qq music上的音乐还是不少的,有些时候想要下载好听的音乐,但有每次在网页下载都是烦人的登录什么的。于是,来了个qqmusic的爬虫。至少我觉得for循环爬虫,最核心的应该就是找到待爬元素所在url吧。下面开始找吧(讲的不…

    2025年2月27日 编程技术
    200
  • 一共有多少种编程语言

    编程语言的数量超过 800 种,主要类别为:1. 通用语言;2. 面向对象语言;3. 脚本语言;4. 函数式语言;5. 逻辑语言;6. 汇编语言。选择合适的编程语言取决于任务的复杂性、性能要求和可用资源。 世界上有多少种编程语言? 编程语言…

    2025年2月27日
    200
  • python中的装饰器、生成器与迭代器介绍

    装饰器() 1、装饰器:本质是函数; 装饰器(装饰其他函数),就是为其他函数添加附加功能; 原则:1.不能修改被装饰函数的源代码;    2.不能修改被装饰的函数的调用方式; 立即学习“Python免费学习笔记(深入)”; 装饰器对被装饰的…

    编程技术 2025年2月27日
    200
  • 编程语言主流38种

    目前主流编程语言有 38 种,其中人气排行前 10 的语言为 Python、Java、JavaScript、C++、C#、R、PHP、SQL、Swift 和 Go。这些语言覆盖广泛的应用领域,包括脚本语言、通用编程语言、后端语言、前端语言、…

    2025年2月27日
    200
  • python 2 map() reduce()函数用法讲解

    利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:[‘adam’, ‘lisa’, ‘bart’],输出:[‘ad…

    2025年2月27日 编程技术
    200
  • 现在最火的编程语言是什么

    目前最热门的编程语言:1. Python:以其易学性、广泛用途和强大的库支持著称,尤适用于数据科学和人工智能。2. JavaScript:无处不在,是 Web 开发的基础,拥有丰富的库和框架。3. C:高效、低级语言,用于操作系统、嵌入式系…

    2025年2月27日
    200
  • Python中对socket的详细介绍

    socket通常也称作”套接字”,用于描述ip地址和端口,是一个通信链的句柄,应用程序通常通过”套接字”向网络发出请求或者应答网络请求。 socket起源于Unix,而Unix/Linux基本…

    2025年2月27日 编程技术
    200

发表回复

登录后才能评论