linux shell 豆瓣,用Linux shell脚本爬取豆瓣邮箱

前两天总结一下邮箱格式的正则表达式,写了一个脚本来判断输入的邮箱地址是否符合邮箱的格式(有兴趣的朋友可以翻一下我的博客去看一下)。在网上找资料的时候,发现基本都是用Python和Java来做爬虫,当然Python的居多。本着学习的心态,既然得到了邮箱地址有效性的判断,那就顺便用脚本写一个抓取网页邮箱的爬虫吧。

豆瓣上着了一个网页,是一个人发起了一项活动,让大家留下邮箱,然后和陌生人进行邮箱通信,增加温暖。(也是很感性呢),不过现在的人们越来越离不开手机了,在这个活动中也许能找到以往那种陌生的温暖呢。网页网址是:https://www.douban.com/group/topic/41562980/?start=0。大家可以进去看看,也可以参加进去,离开手机一会。

9534f0b26ec0c7ed27d634a785c0d538.png

找到网页之后,下一步就是写脚本了。

25ce6841ac9a6511a58dfc9d84290e41.png

脚本解释:

第5行:www是获取网址,把含有邮箱地址的网址输入。

第6行:用curl来抓取网页内容,并下载到文件2data.txt里面。

第7行:取得上一步文件的所有行数,方便做循环。

第8-11行:这个For循环就是遍历所有行,并且把包含邮箱的行重定向到文件1return.txt里面。其中:sed是打印指定的行,egrep是过滤出包含邮箱地址的行。为什么用egrep而不用grep呢,有兴趣的朋友参考我的博客,Linux shell验证邮箱合法性。

执行之后,给大家看一下那两个文件:

b51e9a535bb08410d4f52f218b853e47.png

为了保护隐私允许我自行打码。

d0b8ebbd093554a4aca528bbb9b0fabe.png

暂时初步拿到了邮箱,但是含有邮箱的文件里面还是好多东西,我们可以进一步的清理。观察发现,包含邮箱的行基本都是

邮箱地址。。。,我们可以通过sed命令把邮箱地址前面的

给删除,怎么来做呢?

2a47a5e78b0b0336b72aeec51c372951.png

可以看到,大部分邮箱前面的部分给清理掉了,但是我们还发现后面还有好多是

结尾的,然后我们可以再一次使用sed命令把后面的部分删除(其实这一步是可以和上一步通过管道|命令一次执行的)。

当然上述步骤只是清理大部分内容,还有些则是需要人工干预的。经过一番努力,最后就可以得到你期望的邮箱地址了。

8a8af659da50f3f49128ee451b3d2ded.png

格式完美,于是我想我也要给这些人发邮件,传递时间陌生人之间的温暖,于是把文件通过Samba共享(下次更新Samba共享)到Windows里面去了。打开之后我就纳闷了,效果如下:

e21c6b6c614b8d830b879aabe993f5d2.png

在Linux下明明是一行行多么整齐,怎么到了Windows就成了一行了呢?后来经过查阅资料发现,原来是因为Linux和Windows下文件换行的符号是不一样的,Windows下换行是"\r\n",而Linux下是"\n",Mac下是"\r"。所以在Windows下打开Linux系统的文件只显示了一行。

那怎么让才能让windows下打开Linux的文件正常的显示呢?

我们可以通过一个命令转换一下就可以了,那就是unix2dos:将具有unix格式的文件转换为Windows下的格式。这个命令还有一个双胞胎弟弟:dos2unix:它的功能和哥哥的功能正相反。

命令格式:unix2dos(dos2unix)[-kh]oldfile       newfile

-k 保留源文件的mtime(使用这个选项后面不用加newfile)

-h 保留原来的旧文件,并将转换后的文件输出到新文件

如果Linux上没有这个命令,安装一下就可以了:yum install -y unix2dos.

安装好之后开始转换:

68e6f3f73e1d9789de09b9e4500732a7.png

转换之后的效果:

e53a55e8289144def5220cbc2e5b6d4e.png

这样就看着舒服多了呢。

总结:Linux shell脚本呢主要用于监控运维,当然从上面来看爬取网页其实也是蛮简洁的,只需要几行代码就OK了,但是后续的处理可就稍微复杂一些。往后学了Java和Python之后,然后再写一下Java和Python的爬虫对比一下。对爬取邮箱做个全面的总结。今天就到这了,明天总结Samba下Linux和Windows的文件共享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 获取header_php 输出404状态码

今天在做一个php数据提交的小功能时,需要在判断一个值是如果为空时,就让后台的逻辑页面返回 404 状态码,提示用户页面不存在。那么接下来,飞鸟慕鱼博客要说的是 php 如何返回或输出 html 404 的状态码。php header()函数header()&…

python如何使用字典_Python-如何使用点“。” 访问字典成员?

小编典典 你可以使用我刚刚制作的此类来做。通过此类,你可以Map像其他字典(包括json序列化)一样使用该对象,也可以使用点符号。希望对你有所帮助: class Map(dict): """ Example: m Map({first_name: …

getcwd和pwd为什么不一样_农村医保,为什么每个地区收费不一样?

新农村合作医疗保险的缴费标准,为什么每个地区都不一样呢?我们可能不难发现,就是说你在的地区每年交费可能是280元,但是别的人在的地区可能交费达到了306元或者说320元,这究竟是一种什么样的情况呢?其实每个…

c语言选择结构程序设计笔记,C语言选择结构程序设计.ppt

《C语言选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《C语言选择结构程序设计.ppt(32页珍藏版)》请在人人文库网上搜索。1、选择结构程序设计,关系运算符和关系表达式 逻辑运算符和逻辑表达式 If语句 Switch语句 程序举例,关系运算符和表达式 …

矩阵论思维导图_《实变函数论》 江泽坚 3rd 思维导图与笔记整理

实变函数学十遍实变函数应该是你们本科所有数学课程中最难的了 ————韦老师如是说学期初就知道这个课不好学。话不多说,期末之前把复习导图全部做完了,po上来分享。注:由于制作辛苦,所以预先告知收取些许费用(不到一…

kinux查日志_Linux查看日志常用命令

tail -n 10 test.log 查询日志尾部最后10行的日志;tail -n 10 test.log 查询10行之后的所有日志;head:跟tail是相反的,tail是看后多少行日志;例子如下:head -n 10 test.log 查询日志文件中的头10行日志;head -n -10 test.log 查…

python替换txt指定内容_python 实现类似sed命令的文件内容替换

#!/usr/bin/env python #_*_coding:utf-8 _*_ #replace()方法把字符串中的 old(旧字符串)替换成new(新字符串),如果指定第三个参数max,则替换不超过 max 次。 #语法:str.replace(old, new[, max]) import sys,os old_t…

sftp shell 批量上传文件_如何在shell脚本里使用sftp批量传送文件-阿里云开发者社区...

主要步骤如下:1.为运行shell脚本的本地用户生成密钥对2.将其中的公钥分发到sftp欲登录的远程服务器上3.编写并以上面的本地用户运行shell脚本一.生成密钥对在shell脚本中使用sftp时必须用到密钥对(公钥和私钥).可使用下列方式生成(SSH 2.X版本),这里本地用户记为:local_user:$ …

python nlp_使用python在stanford-nlp中的回指解析

这是使用CoreNLP输出的数据结构的一种可能的解决方案.提供所有信息.这并不是完整的解决方案,可能需要扩展才能处理所有情况,但这是一个很好的起点. from pycorenlp import StanfordCoreNLP nlp StanfordCoreNLP(http://localhost:9000) def resolve(corenlp_output): "&q…

投篮c语言程序设计,教师招聘笔试体育之篮球必做20题(一)

教师招聘笔试体育之篮球必做20题(一)一、单项选择题1.篮球是最基本的区域联防战术是( )站位。A.2-1-2 B.2-3 C.3-2 D.1-3-12.国际篮球规定,球员的球衣号码必须是从( )号开始。A.1-15 B.2-15 C.3-15 D.4-153.篮球比赛中,某队进攻出手后,球碰触…

python分治算法_分治法及其python实现例子

在前面的排序算法学习中,归并排序和快速排序就是用的分治法,分治法作为三大算法之一的,有非常多的应用例子。分治法概念将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题----“分”将最后子问题可…

jackson 读取多文件_Spring Boot系列之读取配置

使用SpringBoot框架开发,读取配置是少不了的,那么你会读取配置吗?你会写配置吗?List?Map?1 目的本节我们要解决如下几个问题:如何使用Spring Boot读取配置文件?有哪些方式&#xff1…

编程c语言顺口溜,C语言运算符优先级顺口溜[转]

醋坛酸味灌 味落跳福豆 共44个运算符 醋-初等,4个: ( ) [ ] -> 指向结构体成员 . 结构体成员 坛-单目,9个: ! ~ -- -负号 (类型) *指针&取地址 sizeof长度 (结合方向:自右向左)酸&#…

python61到08使用说明书_python 08 文件操作

ctrl s 保存至磁盘.exe  .txt   .ppt  .jpg  文件格式open() 函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写open(filename,mode)filename:包含了你要访问的文件名称的字符串值。mode:决定了打…

faster rcnn resnet_RCNN, Fast R-CNN 与 Faster RCNN理解及改进方法

RCNN这个网络也是目标检测的鼻祖了。其原理非常简单,主要通过提取多个Region Proposal(候选区域)来判断位置,作者认为以往的对每个滑动窗口进行检测算法是一种浪费资源的方式。在RCNN中,不再对所有的滑动窗口跑算法,而是只选择一些…

c语言字符串定界符,关于c ++:按字符分割字符串

我知道这是一个非常简单的问题,但我只想一次为自己解决我只想使用字符作为分割定界符将字符串分割成数组。 (很像C#著名的.Split()函数。我当然可以应用蛮力方法,但是我想知道是否有什么更好的方法了。)到目前为止,我已经搜索过&a…

vue 组件不受全局样式影响_组件库引入全局样式lib/style/index.css,会污染全局基础样式...

I have searched the issues of this repository and believe that this is not a duplicate.Version1.3.14Environmentmacos 10.14.6,chrome76.0.3809.100(正式版本),vue 2.6Reproduction linkSteps to reproduce在chrome extension 插件开发中使用ant-…

ab plc编程软件_AB编程软件及所有组态软件授权及安装教程包含FTViewV11

前面发了几个求助的帖子,希望有朋友能提供些Factory Talk View V11的安装和授权,但是一直没有什么回复,今天结合别人的经验,算是把授权安装搞定了,在这里发布出来,希望能帮助到更多的朋友,授权和…

c++ udp多线程 例子_[内附完整源码和文档] 基于udp实现tcp功能进行大文件传输

一.项目要求Please choose one of following programing languages: C, C, Java, Python;本项目采用的是python3.6LFTP should use a client-server service model;本项目使用客户端-服务器的模式LFTP must include a client side program and a server side program; Client s…

jquery设置video的宽度_jquery html5 视频播放控制代码

jQuery HTML5 视频播放控制核心代码:您的浏览器不支持html5!$(video).click(function() {if ($(this).hasClass(pause) ) {$("video").trigger("play");$(this).removeClass(pause);$(this).addClass(play);} else {$("video&q…