Python简单网络爬虫实战—下载论文名称,作者信息(上)中,学会了get到网页内容以及在谷歌浏览器找到了需要提取的内容的数据结构,接下来记录我是如何找到所有author和title的

1.从soup中get到data类

soup中提供了select方法来筛选所需的类。该方法使用方法如下:

articlename = soup.select('title')

该语句即将soup中所有的title元素放到articlename中。select也有其他用法

articlename = soup.select('.data') #类前面要加"."
articlename = soup.select('#username')#ID这种唯一的元素,前加"#"
articlename = soup.select('.publ-list .entry.editor .data')#可以组合查找,publ-list类下面的entry.editor类下面的data类,按次序用空格隔开
articlename = soup.select('.publ-list .entry.editor .data .title')[0].contents[0]#title类中第一个元素的第一个文本内容

我们用如下语句get到该网页中所有的data类,这样就包含了所有的author和title,去除了网页中其他无关的元素,离目标更近了一步

soup.select('.publ-list .entry.inproceedings .data')

2.data类中筛选所有author与title

这是一个data类的所有内容。

其中author元素还有更下一级的结构

可以看到,一个data类中author和title元素并不是紧密连接的,在每个authro行之间,有“,”和“:”行隔开,在title行下方,还有dataPublished、genre等元素,但下方的元素都是固定的,行数也固定。因此我把一个.data描述为如下的多维数组:

[
[author1,url,name ]
["," ]
[author2,url,name ]
[":" ]
[<br> ]
[title,name ]
["datePublished",content]
[</article> ]
]

由于作者数量不固定,因此还要计算作者数量。因为每个author元素后面都会跟一个标点符号,因此似乎只要计算data类的长度减去4,再除以2就可以得到作者数量,然而在实际操作中发现,应该减去5。直到现在我也没有明白原因,可能这里需要补充HTML网站相关的知识

authornum = int((len(articles)-5)/2)

得到了作者数量,就很容易定位到作者所在的行(下标)和title所在的行(下标)

观察元素内容可以看到,authorname和titlename都是唯一的文本,用以下命令获取即可

for i in range(0,authornum):
authorlist.append(str(articles.contents[i*2].get_text()))
articlename = str(articles.contents[(authornum+1)*2].get_text())

至此,该脚本的所有难点都搞定啦,接下来就水到渠成,理一下逻辑就ok啦

Python简单网络爬虫实战—下载论文名称,作者信息(下)的更多相关文章

  1. Python开发网络爬虫抓取某同城房价信息

    前言: 苦逼的我从某某城市换到另一个稍微大点的某某城市,面临的第一个问题就是买房,奋斗10多年,又回到起点,废话就不多说了,看看如何设计程序把某同城上的房价数据抓取过来. 方案:方案思路很简单,先把网 ...

  2. python网络爬虫实战PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:vg1y python网络爬虫实战帮助读者学习Python并开发出符合自己要求的网络爬虫.网络爬虫,又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取互联网信息的程序或者脚 ...

  3. 关于Python网络爬虫实战笔记③

    Python网络爬虫实战笔记③如何下载韩寒博客文章 Python网络爬虫实战笔记③如何下载韩寒博客文章 target:下载全部的文章 1. 博客列表页面规则 也就是, http://blog.sina ...

  4. Python 利用Python编写简单网络爬虫实例3

    利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://bbs.51testing. ...

  5. Python 利用Python编写简单网络爬虫实例2

    利用Python编写简单网络爬虫实例2 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://www.51testing. ...

  6. Python 3网络爬虫开发实战》中文PDF+源代码+书籍软件包

    Python 3网络爬虫开发实战>中文PDF+源代码+书籍软件包 下载:正在上传请稍后... 本书书籍软件包为本人原创,在这个时间就是金钱的时代,有些软件下起来是很麻烦的,真的可以为你们节省很多 ...

  7. Python 3网络爬虫开发实战中文 书籍软件包(原创)

    Python 3网络爬虫开发实战中文 书籍软件包(原创) 本书书籍软件包为本人原创,想学爬虫的朋友你们的福利来了.软件包包含了该书籍所需的所有软件. 因为软件导致这个文件比较大,所以百度网盘没有加速的 ...

  8. Python 3网络爬虫开发实战中文PDF+源代码+书籍软件包(免费赠送)+崔庆才

    Python 3网络爬虫开发实战中文PDF+源代码+书籍软件包+崔庆才 下载: 链接:https://pan.baidu.com/s/1H-VrvrT7wE9-CW2Dy2p0qA 提取码:35go ...

  9. 《Python 3网络爬虫开发实战中文》超清PDF+源代码+书籍软件包

    <Python 3网络爬虫开发实战中文>PDF+源代码+书籍软件包 下载: 链接:https://pan.baidu.com/s/18yqCr7i9x_vTazuMPzL23Q 提取码:i ...

随机推荐

  1. 生产问题之泛型自动推断(JDK1.7新特性)

    今天提完代码,新来同事拉下代码后,如下代码出现异常: List<TblBlockMoneyDtl> transData = new ArrayList<>(); 分析原因后发现 ...

  2. 解决使用vue打包时vendor文件过大或者是app.js文件很大的问题

    这篇文章主要介绍了使用vue打包时vendor文件过大或者是app.js文件很大问题的解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 第一次使用vue2.0开发,之前都是用的angu ...

  3. MariaDB使用enum和set

    1.enum 单选字符串数据类型,适合存储表单界面中的“单选值”. 设定enum的时候,需要给定“固定的几个选项”:存储的时候就只存储其中的一个值. 设定enum的格式: enum("选项1 ...

  4. 运维堡垒机(跳板机)系统 python

    相信各位对堡垒机(跳板机)不陌生,为了保证服务器安全,前面加个堡垒机,所有ssh连接都通过堡垒机来完成,堡垒机也需要有 身份认证,授权,访问控制,审计等功能,笔者用Python基本实现了上述功能. A ...

  5. hive日期函数-Demo(二)

    需求:某资产近一个月的资产值 比如:今天是2018年2月28日,近一个月若是按照自然月来算,那么是2018年2月1日至2018年2月28日.最终需要的日期格式为:yyyyMMdd. 当日时间戳 uni ...

  6. Hadoop-No.14之文件传输的特点

    文件传输特点 这是一种all-or-nothing批处理方法,所以如果文件传输过程中出现错误,则不会写入或读取任何数据.这种方法与Flume,Kafka之类的采集方法不同,后者提供一定程度的错误处理功 ...

  7. Codeforces 852F String Compression

    题目 OvO http://codeforces.com/contest/825/problem/F 题解 KMP+DP 十分优雅地利用了KMP的fail数组 fail[k]表示第k个后缀的的fail ...

  8. JVM(四),什么是反射

    四.什么是反射 1.反射理论 2.反射实践 (1)创建Robot类 public class Robot { private String name; public void sayHi(String ...

  9. Java线程之ThreadLocal

    翻译:https://www.journaldev.com/1076/java-threadlocal-example?utm_source=website&utm_medium=sideba ...

  10. 「HEOI2016/TJOI2016」 排序

    题目链接 戳我 \(Solution\) 这道题在线的做法不会,所以这里就只讲离线的做法. 因为直接排序的话复杂度显然不对.但是如果数列为\(01\)串的话就可以让复杂度变成对的了 那么\(01\)串 ...