爬取句子迷——莎士比亚语录(约2290个句子,229个分页)

这个练手的过程,在我不使用IP代理的情况下,我使用的IP惨遭封禁数次,好在隔几个小时就会被解封,但我却好比黏人的鼻涕虫一般,句子不给我,我就不走了,哼哼。

工具使用的是 Python3.7 + requests + BeautifulSoup4 + 线程

首先句子迷是具有一定反爬程序的,具体是怎样的就不清楚,但是文字还是整整齐齐摆放着,这个还是很友好的,前端页面分析完就开始我数次爬取尝试。

第一次尝试爬取数据

规规矩矩的在边缘试探,结果很不理想,字都存放在TXT文件中(171KB),根本爬不完就被封IP了,返回给你一个403的状态码,很过分的哦,就几个字也这么小气不给我,还反爬,既然被封了,我就只能睡觉了呗!

第二、三次尝试

我一早起来,发现句子迷这个网站又能访问了,开心的很呐,还以为被封了就不能再访问了呢,然后就开始了我第二次尝试,这次我想着不能这么明目张胆了,得猥琐一点的,用时间换取完整且成功的结果。

当然这个方法就是利用sleep进行伪装咯,因为一共229页,我设置每爬取5页就随机休息5以内秒哦,time.sleep(random.randint(1,5)) ,这样我不过分吧!可是呢,结果又让我失望了一波,IP再一次被封,当然我也不会放弃,解封之时就是我再战之时,当然这样设置一下还是有收获的,爬取到相当于上一次两倍的数据量。第三次尝试,我为了避免休眠数字随机性被检测到,我专门设置了小数加在后面,然而并没有什么用。

第四次尝试

永不言弃的我在第四次不好意思的是又失败了,但这一次我完全放下了身段,因为这次我打算睡眠1-5秒的同时只爬取一页的数据,这个不过分吧,跟人手动点击的速度差不多了吧,想着多花点时间赶紧了结了吧。谁知我才离开电脑不久IP就被封了,得到的句子比起之前的反而更少了,而且封的同时 我发现请求这个页面被封前我都休息了5秒,这就让我怀疑 并不是访问频率过快,而是访问周期过长? 然后我赶紧修改程序,开启了我第三次尝试,因为宽带IP被封了,迫于需要更换IP,这接下来的尝试则是使用的手机热点...0.0,原本都没想着能成功的。

第五次尝试

这一次我想使用的是线程,通过html代码中pager-lastclass下的a标签获取总页数,然后创建对应数量的线程,同时爬取每一页的句子并存储在 对应页数.txt 文件中,每个txt文件相当于10个句子。这一次我终于成功拿到我想要的所有数据,还蛮兴奋咯,差点逼得我要使用代理了。

部分代码如下

#coding=utf-8
import requests
from requests import codes
import io
import bs4
import os
import random
import time
import threading
from bs4 import BeautifulSoupwebUrl = 'https://www.juzimi.com/'
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}def downLoadPageExtra(url):try:realUrl = webUrl + '/writer/%E8%8E%8E%E5%A3%AB%E6%AF%94%E4%BA%9A'+"?page="+str(url)content = requests.get(realUrl,headers = headers)content.encoding = "UTF-8"if codes.ok == content.status_code:soup = BeautifulSoup(content.text,'html.parser')downLoadTxt = soup.findAll('a',class_='xlistju')f = open("juzimi"+ "/" + str(url) + ".txt", 'a', encoding='utf-8')for dlt in downLoadTxt:f.writelines((dlt.text)+"\r\n\r\n")print(str(url)+"OK")f.close()else:print("状态码出错")except:print("getPageCodeError1")
def downLoadPage(url):try:content = requests.get(url,headers = headers)content.encoding = "UTF-8"if codes.ok == content.status_code:soup = BeautifulSoup(content.text,'html.parser')downLoadTxt = soup.findAll('a',class_='xlistju')#获取标题创建文件title = str(soup.title.string).strip('/').split('?')[0]#获取页数pageCounts = soup.find('li',class_='pager-last').find_all('a')[0].textf=open("juzimi"+"/"+ title + ".txt", 'a',encoding='utf-8')for dlt in downLoadTxt:f.writelines(str(dlt.text)+"\r\n\r\n")f.close()print("第一句完成")for num in range(1,int(pageCounts)):t = threading.Thread(target=downLoadPageExtra,args=(num,))t.start()print('爬取完成...')except requests.ConnectionError:print("getPageCodeError2")if __name__ == '__main__':dirSave = 'juzimi/'if os.path.exists(dirSave) is False:os.makedirs(dirSave)downLoadPage(webUrl + '/writer/%E8%8E%8E%E5%A3%AB%E6%AF%94%E4%BA%9A')

代码具体如上,不保证百分百直接能运行,因为是从项目中复制过来并且做了部分修改,但是大致原理已说明,使用多线程,因为是IO密集型,所以多线程还是挺好使的,速度那是相当的快啊,几十秒就通通搞定,当然我们如果需要将所有txt文件合并成一个的话,我又写了一个合并程序。

代码如下


import io
# 通过html页面标题命名的txt文件,并且存储的第一页的句子
mergeTxtName = '莎士比亚经典语录_名言_名句赏析_句子迷.txt'
# 开始标记
start = 1
# 结束标记
end = 228
f = open(mergeTxtName,'a',encoding='utf-8')
for n in range(start,end + 1):g = open(str(n)+'.txt','r',encoding='utf-8')f.write(g.read())print(str(n)+"完成")g.close()
f.close()
print("ok")

此代码文件应当放置在下载目录中,否则请修改对应路径,若并不是获取莎士比亚的句子,还需要修改mergeTxtName字符串,此代码不提供删除已合并的txt文件,若需要可自行增加...自写程序时请注意文件读写操作时的字体编码问题...

总结

写爬虫当多多练手,基础的熟练,再有针对的提高难度,征服更多网站,第一次尝试使用博客园的markdown风格,相比较有道云笔记本的书写,这里不是很习惯,先试着一次,个人感觉效果好的话以后就用这种方式写了,要是有一个实时预览该有多好啊。

爬取了莎士比亚的句子后并不是满足于技术的提升,说到底并没有多少提升,总归的来说还是属于静态界面,初心则是想阅览一下这些有趣的句子,有一些话语写的真的很好,并成为我的座右铭:

我荒废了时间,时间便把我荒废了。

转载于:https://www.cnblogs.com/MessyInk/p/10099606.html

Python爬取句子迷-莎士比亚语录相关推荐

  1. 使用TensorFlow.js的AI聊天机器人六:生成莎士比亚独白

    目录 设置TensorFlow.js代码 小莎士比亚数据集 通用句子编码器 莎士比亚独白在行动 终点线 总结 下载项目代码-9.9 MB TensorFlow+JavaScript.现在,最流行.最先 ...

  2. python爬取《龙岭迷窟》的数据,看看质量剧情还原度到底怎么样

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:简单 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行 ...

  3. python爬取网易云音乐 专辑图片+歌词

    思路 一开始的想法是全都直接根据歌单获取歌曲的ID,然后每首歌都按那个格式001.mp3\001.txt\001.png存下来 后来发现我好像做不到直接下mp3--因为在网页版一点会跳出来请在PC版下 ...

  4. 当莎士比亚遇见Google Flax:教你用​字符级语言模型和归递神经网络写“莎士比亚”式句子...

    作者 | Fabian Deuser 译者 | 天道酬勤 责编 | Carol 出品 | AI科技大本营(ID:rgznai100) 有些人生来伟大,有些人成就伟大,而另一些人则拥有伟大. -- 威廉 ...

  5. 有一分热,发一分光,用Python 爬取鲁迅先生《经典语录》

    大家好,我是天作. 正值五四青年节,<后浪>看的人热血沸腾.B站版本视频的底部,评论最多的一段话之一便是鲁迅先生这句. "愿中国青年都摆脱冷气,只是向上走,不必听自暴自弃者流的话 ...

  6. python爬取文件归类_python爬取各类文档方法归类汇总

    HTML文档是互联网上的主要文档类型,但还存在如TXT.WORD.excel.PDF.csv等多种类型的文档.网络爬虫不仅需要能够抓取HTML中的敏感信息,也需要有抓取其他类型文档的能力.下面简要记录 ...

  7. python爬取携程旅游评价信息词云图分析

    python爬取携程旅游评价信息词云图分析 前言 前面咱们已经分析过如何爬取携程旅游的相关信息,如果没有看过的,可以先跳转看一下前面的那篇博客:python 爬虫 一键爬取携程旅游团数据 这一篇呢,咱 ...

  8. python爬取虎扑评论_Python爬取NBA虎扑球员数据

    虎扑是一个认真而有趣的社区,每天有众多JRs在虎扑分享自己对篮球.足球.游戏电竞.运动装备.影视.汽车.数码.情感等一切人和事的见解,热闹.真实.有温度. 受害者地址 https://nba.hupu ...

  9. python爬取微博数据词云_用Python爬取微博数据生成词云图片

    原标题:用Python爬取微博数据生成词云图片 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能BI.大数 ...

  10. Python爬取百度翻译及有道翻译

    Python爬取百度翻译及网易有道翻译 百度翻译 一.简介 明确翻译链接,百度翻译链接:https://fanyi.baidu.com/,但是该链接不能为我们提供翻译的内容,此时需要在chrome浏览 ...

最新文章

  1. socket 编程入门教程(四)TCP应用:1、构建echo服务器
  2. 希捷推2TB 2.5英寸SSHD和5TB 2.5英寸机械硬盘
  3. LuoguP2292 L语言
  4. .Net Core迁移到MSBuild的多平台编译问题
  5. node 更新_被创造者嫌弃,Node.js 如何应对来自 Deno 的挑战
  6. 文件后缀_电脑文件名的后缀即扩展名的显示和隐藏方法
  7. VMware配置上限(Configuration Maximums)
  8. King Arthur
  9. Mysql之insert,update,delete
  10. 将网站转换为应用程序的软件—“Unite”
  11. 特殊的空格-ASCII码值160
  12. 如何学习UG编程?零基础入门学UG难吗
  13. 基于STM32开发板和Web网页的蔬菜大棚温湿度、光照等变化的动态柱形图表
  14. 85条高级AutoCAD工程师绘图技巧(2)
  15. Springboot 整合Shiro认证 集成第三方QQ登录
  16. 并发编程之:Atomic
  17. 关于CS1.6中模型导出到3dsmax
  18. html5 立方体 鼠标滑动,,HTML5超酷3D立方体按钮效果
  19. JVM进阶(六):鲜为人知的二次标记
  20. Addressable热更新

热门文章

  1. 插入安装光盘并重新启动计算机,电脑开机时显示 插入windows安装光盘并重新启动计算机 怎么解决 急救...
  2. c语言高亮字符,C语言语法高亮工具
  3. 曝一段十多年前的“情史”!
  4. 洛谷 P3110 [USACO14DEC]驮运Piggy Back ( spfa) 题解
  5. java rs 什么意思_rs是什么意思?
  6. Safari浏览器插件 Tampermonkey
  7. 《朗读者》中那些让人受益终生的句子
  8. 50个程序员必须知道的网站,你知道么
  9. c语言仿qq截图源码,C#实现属于自己的QQ截图工具
  10. 计算机excel取整函数,Excel取整公式集锦