目标:爬取湖南大学2018年在各省的录取分数线,存储在txt文件中

部分表格如图:

部分html代码:

<table cellspacing="0" cellpadding="0" border="1">
   <tbody>
    <tr class="firstRow" >
     <td rowspan="2" ><p ><strong><span >省份</span></strong></p></td>
     <td colspan="4" ><p ><strong><span >文科</span></strong></p></td>
     <td colspan="4" ><p ><strong><span >理科</span></strong></p></td>
    </tr>
    <tr >
     <td ><p ><strong><span >一本线</span></strong></p></td>
     <td ><p ><strong><span >艺术类</span></strong></p></td>
     <td ><p ><strong><span >高校专项计划</span></strong></p></td>
     <td ><p ><strong><span >普通类</span></strong></p></td>
     <td ><p ><strong><span >一本线</span></strong></p></td>
     <td ><p ><strong><span >高校专项计划</span></strong></p></td>
     <td ><p ><strong><span >国家专项计划</span></strong></p></td>
     <td ><p ><strong><span >普通类</span></strong></p></td>
    </tr>
    <tr >
     <td ><p ><strong><span >北京</span></strong></p></td>
     <td valign="middle" align="left"><p ><span ><strong><span lang="EN-US">576</span></strong></span></p></td>
     <td valign="middle" align="left"><br></td>
     <td valign="middle" align="left"><br></td>
     <td valign="middle" align="left"><p ><span ><strong><span lang="EN-US">633</span></strong></span></p></td>
     <td valign="middle" align="left"><p ><span ><strong><span lang="EN-US">532</span></strong></span></p></td>
     <td valign="middle" align="left"><br></td>
     <td valign="middle" align="left"><br></td>
     <td valign="middle" align="left"><p ><span ><strong><span lang="EN-US">624</span></strong></span></p></td>
    </tr>
    <tr >
     <td ><p ><strong><span >天津</span></strong></p></td>
     <td valign="middle" align="left"><p ><span ><strong><span lang="EN-US">436/527</span></strong></span></p></td>
     <td valign="middle" align="left"><br></td>
     <td valign="middle" align="left"><br></td>
     <td valign="middle" align="left"><p ><span ><strong><span lang="EN-US">614</span></strong></span></p></td>
     <td valign="middle" align="left"><p ><span ><strong><span lang="EN-US">407/554</span></strong></span></p></td>
     <td valign="middle" align="left"><br></td>
     <td valign="middle" align="left"><br></td>
     <td valign="middle" align="left"><p ><span ><strong><span lang="EN-US">626</span></strong>&nbsp;</span></p></td>
    </tr>   ......     <tr >
     <td ><p ><strong><span >上海</span></strong></p></td>
     <td colspan="8" valign="top"><p ><strong><span >本科线</span></strong><strong><span lang="EN-US">/</span></strong><strong><span >自主招生参考线:</span></strong><strong><span lang="EN-US">401/502</span></strong><strong><span >;</span></strong><strong><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span >(专业组)最低投档线:<span >533</span></span></strong></p></td>
    </tr>
    <tr >
     <td ><p ><strong><span >浙江</span></strong></p></td>
     <td colspan="8" valign="top"><p ><strong><span >本科线</span></strong><strong><span lang="EN-US">/</span></strong><strong><span >一段线:</span></strong><strong><span lang="EN-US">344/588</span></strong><strong><span >;</span></strong><strong><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </span></strong><strong><span >(专业)最低投档线:639</span></strong></p></td>
    </tr>
   </tbody>
  </table>

代码:

import requests
from lxml import etree # 设置URL地址和请求头
url = 'http://admi.hnu.edu.cn/info/1024/3094.htm'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36',
'Cookie': 'ASP.NET_SessionId=yolmu555asckw145cetno0um'
} # 发送请求并解析HTML对象
response = requests.get(url, headers=headers)
html = etree.HTML(response.content.decode('utf-8')) # 数据解析
table = html.xpath("//table//tr[position()>2]") # XPath定位到表格,因为页面只有一个表格,所以直接//table,
# 如果有多个表格,如取第二个表格,则写为//table[1] 偏移量为1 。我们不取表头信息,所以从tr[3]开始取,返回一个列表 dep = [] for i in table: # 遍历tr列表
p = ''.join(i.xpath(".//td[1]//text()")) # 获取当前tr标签下的第一个td标签,并用text()方法获取文本内容,赋值给p
sl = ''.join(i.xpath(".//td[6]//text()"))
sc = ''.join(i.xpath(".//td[9]//text()"))
ll = ''.join(i.xpath(".//td[2]//text()"))
lc = ''.join(i.xpath(".//td[5]//text()")) print(p, sl, sc, ll, lc)
data = { # 用数据字典,存储需要的信息
'省份': ''.join(p.split()), # .split()方法在此处作用是除去p中多余的空格 '\xa0'
'理科一本线': ''.join(sl.split()),
'理科投档线': ''.join(sc.split()),
'文科一本线': ''.join(ll.split()),
'文科投档线': ''.join(lc.split())
}
print(data)
dep.append(data) #数据存储
with open('2018enro.txt', 'w', encoding='utf-8') as out_file:
out_file.write("湖南大学:"+"2018年各省录取分数线:\n\n")
for i in dep:
out_file.write(str(i)+'\n')

注:原本数据字典是这样写的:

for i in table:
data = { # 用数据字典,存储需要的信息
'省份': ''.join(i.xpath(".//td[1]//text()")),
'理科一本线': ''.join(i.xpath(".//td[6]//text()")),
'理科投档线': ''.join(i.xpath(".//td[9]//text()")),
'文科一本线': ''.join(i.xpath(".//td[2]//text()")),
'文科投档线': ''.join(i.xpath(".//td[5]//text()"))
}

输出结果有很多‘\xa0’,其实就是空格,源网页中就字段里就存在很多空格:

plus:解析表格有更好的方法,比如pandas,一步到位!非常方便。

详情请看我的另一篇文章:

https://www.cnblogs.com/cttcarrotsgarden/p/10769097.html

python简单爬虫 用lxml解析页面中的表格的更多相关文章

  1. python简单爬虫 用lxml库解析数据

    目标:爬取湖南大学2018年本科招生章程 url:http://admi.hnu.edu.cn/info/1026/2993.htm 页面部分图片: 使用工具: Python3.7 火狐浏览器 PyC ...

  2. python简单爬虫 使用pandas解析表格,不规则表格

    url = http://www.hnu.edu.cn/xyxk/xkzy/zylb.htm 部分表格如图: 部分html代码: <table class="MsoNormalTabl ...

  3. Python简单爬虫入门二

    接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们Bea ...

  4. GJM : Python简单爬虫入门(二) [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  5. python简单爬虫一

    简单的说,爬虫的意思就是根据url访问请求,然后对返回的数据进行提取,获取对自己有用的信息.然后我们可以将这些有用的信息保存到数据库或者保存到文件中.如果我们手工一个一个访问提取非常慢,所以我们需要编 ...

  6. Python简单爬虫入门三

    我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ...

  7. Python 简单爬虫案例

    Python 简单爬虫案例 import requests url = "https://www.sogou.com/web" # 封装参数 wd = input('enter a ...

  8. 【转】一张图解析FastAdmin中的表格列表的功能

     一张图解析FastAdmin中的表格列表的功能 功能描述请根据图片上的数字索引查看对应功能说明. 1.时间筛选器如果想在搜索栏使用时间区间进行搜索,则可以在JS中修改修改字段属性,如 {field: ...

  9. jQuery 中使用 DOM 操作节点,对页面中的表格实现增、删、查、改操作

    查看本章节 查看作业目录 需求说明: 在 jQuery 中使用 DOM 操作节点,对页面中的表格实现增.删.查.改操作 点击"增加"超链接时,将表格中的第一条数据添加到表格的末尾 ...

随机推荐

  1. 从事三年java开发后, 我打算转人工智能

    作为一个2015年参加java培训,2016年计算机科学与技术本科毕业后一直从事java开发的程序员来说, 做出这一步真的不容易, 可是我没赶上java最火的时候,反而渐渐感受到了java的没落, 目 ...

  2. fprintf中使用stderr

    fprintf是C/C++中的一个格式化写-库函数,位于头文件<stdio.h>中,其作用是格式化输出到一个流/文件中 运行如下代码: #include <stdio.h> v ...

  3. C语言--第1次作业

    1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 经过一周C语言的正式课堂学习,不同于暑期时扒视频囫囵吞枣式学习,林丽老师的讲解详细异常,尽管已经学习了一部分内 ...

  4. 蓝牙 - 小米手环3 NFC版BLE协议研究

    0x01 前言 最近买到了小米手环3nfc版本,基本上实现了我对手环的所有功能需求,高中的时候就缠线圈做过戒指一卡通,但是缺陷是不好看,而且只能储存一张卡,等 手环3nfc版我认为比较好的功能 可以储 ...

  5. css3 calc()的用法

    转载自:css3 calc()的用法 说明:calc(四则运算):任何长度值都可以使用calc()函数进行计算:和平时的加减乘除优先顺序一样一样的: 特别注意:calc()里面的运算符必须前后都留一个 ...

  6. hdoj3138

    题意:略 各点向原信念连INF+1的边,不同信念连INF的边,这样割原信念花费大一点.然后好友连1的边.最小割的结果-n*INF就是答案,因为割到哪边最少都要INF. #include <ios ...

  7. js vue 在页面中将摄像头放在一个标签里展示,(模仿手机拍照功能)

    1.HTML <video id="video" autoplay class="fileImg"></video> <canva ...

  8. 深深感受 Promise.all 带来的速度提升

    什么是Promise Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.(摘抄自 阮一峰老师的 ECMAScript 6 入门).具体请查看阮一峰老师的这 ...

  9. 关于a标签的用法总结

    onclick的事件被先执行 ,其次是href中定义的(页面跳转或者javascript) 同时存在两个定义的时候(onclick与href都定义了),如果想阻止href的动作,在onclick必须加 ...

  10. zzw原创_ipv6下环境配置防火墙及FTP处理一例

    缘由:公司这段时间要将原IPV4地址切换到IPV6,在环境配置的过程中,碰到一坑,平时不太注意的问题,在IPV6下却放大了 实现目标:在IPV6下,机器A可以FTP到机器B,可以传输.下载文件 A机器 ...