我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python动态网页批量爬取

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python动态网页批量爬取

四六级成绩查询网站我所知道的有两个:学信网(http://www.chsi.com.cn/cet/)和99宿舍(http://cet.99sushe.com/),这两个网站采用的都是动态网页。我使用的是学信网,好了,网站截图如下:

查看图片

网站的代码如下:


<form method="get" name="form1" id="form1" action="/cet/query">

<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr><td align="right">准考证号:</td><td align="left"><input name="zkzh" value="112008000463141" id="zkzh" type="text" size="18" maxlength="15" class="input_text input_t_l" /></td>
 <td align="left" class="font12 color666">请输入15位准考证号</td>
</tr>
<tr><td align="right">姓名:</td><td align="left"><input name="xm" value="啊啊" id="xm" type="text" size="18" maxlength="50" class="input_text input_t_l" /></td>
 <td align="left" class="font12 color666">姓名超过3个字,可只输入前3个</td>
</tr>

<tr><td align="center"> </td>
 <td colspan="2" align="left"><input type="submit" id="submitCET" class="btn_blue" value="查询" /></td>
 </tr>
</table>
</form>

由图中可以看出表单提交的链接为/cet/query,即:http://www.chsi.com.cn/cet/query,好了,填写表单和结果如下:

查看图片

查看图片

但是,点击查看源代码之后发现,没有成绩,即代码仍是上面那个,之后按F12查看代码:


<TBODY><TR>
<TH>姓名:</TH>
<TD>XXXX</TD></TR>
<TR>
<TH>学校:</TH>
<TD>XXXXXX</TD></TR>
<TR>
<TH>考试类别:</TH>
<TD>英语四级</TD></TR>
<TR>
<TH>准考证号:</TH>
<TD>120135151100101</TD></TR>
<TR>
<TH>考试时间:</TH>
<TD>2015年06月</TD></TR>总分:</TH><TD class=fontBold vAlign="top"><SPAN class=colorRed>403 </SPAN><BR><SPAN class=color666>听力:</SPAN> 132 <BR><SPAN class=color666>阅读:</SPAN> 147 <BR><SPAN class=color666>写作与翻译:</SPAN> 124 </TD></TR>

该代码显示了成绩,可以知道,该网站使用的是动态网页,用的JavaScript或者Ajax.js还是其他的我就不知道了0.0。上面为需求。

前言:使用过BeautifulSoup爬取过,但是BeautifulSoup是爬取不了动态网页的,上各种论坛找各种资料,用了n种东西,scapy,pyqt等等,走了真心不少弯路,不是不行,应该是我不会用,最终用了selenium和phantomjs,这两个应该也是目前最流行的爬虫模块了吧。

一、导入selenium和phantomjs


from selenium import webdriver

driver = webdriver.PhantomJS(executable_path='D:phantomjs-2.1.1-windowsphantomjs.exe')
driver.get(url)
driver.find_element_by_id('zkzh').send_keys(i)
driver.find_element_by_id('xm').send_keys(xm)
driver.find_elements_by_tag_name('form')[1].submit()

代码说明:

  3.selenium可以加载很多驱动,比如Chrome、FireFox等,这里需要有这两个浏览器和驱动才行,折腾了一下,网上说Phantomjs是较好的了

  5、6、7分别是准考证号,姓名和提交

二、字符处理

提交之后就可以直接查找了:


print driver.find_element_by_xpath("//tr[3]/td[1]").text
print driver.find_element_by_xpath("//tr[6]/td[1]").text

代码说明:

  1.查看姓名

  2.查看分数及其具体成绩

打印之后为:


姓名
听力
阅读
写作

  之后要对分数进行字符串处理,选取各部分的数字,这里我们采用re模块:


 import re
m = re.findall(r'(w*[0-9]+)w*', chuli2)


其中m是数组,输出的是["403","132","147","142"]

三、数据库

  我们学校也不知说很渣还是人性化,反正公布了全校的四六级准考证号,当然,是excel的,需要导入mysql数据库,打开Excel之后,我发现微软大法和Oracle真是牛,Excel365居然有mysql workbench连接部分。

查看图片

数据库代码如下:


import MySQLdb

conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='cet', port=3306, charset='utf8')
cur = conn.cursor()
curr = conn.cursor()
cur.execute("select name from cet.cet where zkzh=(%s)" % i)
xm = cur.fetchone()[0]
print "Name is " + xm
sqltxt = "update cet.cet set leibie=(%s),zongfen=(%s),tingli=(%s),yuedu=(%s),xiezuo=(%s) WHERE zkzh=(%s)" % (
  ss, m[0], m[1], m[2], m[3], i)
cur.execute(sqltxt)
conn.commit()
cur.close()
conn.close()

代码说明:

  3.python连接数据库代码

  6.连接数据库取得姓名部分

  9.这行我好无语啊,使用‘“+ss+”'这样的写法一直报错,最终找了半天资料,这个写法我不太喜欢,但是凑合着用吧。

  12.记得一定要提交事务!!!commit()!!!不然是没有效果的

四、使用代理服务器(保留以后写)

  运行了一段时间之后,大概抓了几百人的吧,然后就出现要求验证码了,解决办法只能处理验证码或者使用代理服务器了,这部分继续加强学习再弄出来了?(^ω^)?

五、源代码和效果


# encoding=utf8

import MySQLdb
import re
import time

from selenium import webdriver

# connect mysql,get zkxh and xm
conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='cet', port=3306, charset='utf8')
cur = conn.cursor()
curr = conn.cursor()
url = 'http://www.chsi.com.cn/cet/query'


def kaishi(i):
 print i,
 print " start"
 try:
 cur.execute("select name from cet.cet where zkzh=(%s)" % i)
 xm = cur.fetchone()[0]
 print "Name is " + xm
 driver = webdriver.PhantomJS(executable_path='D:phantomjs-2.1.1-windowsphantomjs.exe')
 driver.get(url)
 driver.find_element_by_id('zkzh').send_keys(i)
 driver.find_element_by_id('xm').send_keys(xm)
 driver.find_elements_by_tag_name('form')[1].submit()
 driver.set_page_load_timeout(10)
 leibie = driver.find_element_by_xpath("//tr[3]/td[1]").text
 leibie2 = str(leibie.encode("utf-8"))
 ss = ""
 if leibie2.decode("utf-8") == '英语四级'.decode("utf-8"):
  ss = 4
 else:
  ss = 6
 # zongfen = driver.find_element_by_xpath("//tr[6]/th[1]").text
 # print zongfen
 # print "===="
 chuli = driver.find_element_by_xpath("//tr[6]/td[1]").text
 print chuli
 chuli2 = str(chuli.encode("utf-8"))
 m = re.findall(r'(w*[0-9]+)w*', chuli2)
 sqltxt = "update cet.cet set leibie=(%s),zongfen=(%s),tingli=(%s),yuedu=(%s),xiezuo=(%s) WHERE zkzh=(%s)" % (
  ss, m[0], m[1], m[2], m[3], i)
 cur.execute(sqltxt)
 conn.commit()
 print str(i) + " finish"
 except Exception, e:
 print e
 driver.close()
 time.sleep(10)
 kaishi(i)


# for j1 in range(1201351511001, 1201351512154):
for j1 in range(1201351511007, 1201351512154):
 for j2 in range(0, 3):
 for j3 in range(0, 10):
  j = str(j1) + str(j2) + str(j3)
  if str(j2) + str(j3) == "00":
  print "0.0"
  elif str(j2) + str(j3) == "29":
  kaishi(str(j1) + str(j2) + str(j3))
  j4 = str(j1) + "30"
  kaishi(j4)
  else:
  kaishi(j)
print "END!!!"
cur.close()
conn.close()

查看图片

总结:python的字符串处理细节真的很重要,动不动就输出错误,还有IDE的编码不一样,记得还有个系统编码,字符编码,环境编码,数据库编码等等都要一致。

以上就是本文的全部内容,希望对大家的学习有所帮助。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python动态网页批量爬取

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python动态网页批量爬取

四六级成绩查询网站我所知道的有两个:学信网(http://www.chsi.com.cn/cet/)和99宿舍(http://cet.99sushe.com/),这两个网站采用的都是动态网页。我使用的是学信网,好了,网站截图如下:网站的代码
2022-06-04

Python静态网页爬取:批量获取高清壁

前言在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤一般地,我们去网上批量打开壁纸的时候一般操作如下:1、打开壁纸网页2、单击壁纸图(打开指定壁纸的页面)3、选择分辨率(我们要下载高清的图)4、保存图片实际操作时,我们实现
2023-01-31

怎么利用Python批量爬取网页图片

你可以使用Python的requests库来发起HTTP请求,并使用BeautifulSoup库来解析HTML文档以获取图片的URL。下面是一个简单的示例代码,用于批量爬取网页上的图片:```pythonimport requestsfro
2023-09-27

nodejs怎么爬取动态网页

要爬取动态网页,可以使用Node.js的一些库和工具,如Puppeteer、Cheerio和Axios。下面是一个使用这些工具的示例:1. 首先,使用npm安装所需的库和工具:```bashnpm install puppeteer che
2023-08-15

python爬取动态网页的方法是什么

Python爬取动态网页的方法有以下几种:1. 使用Selenium库:Selenium是一个自动化测试工具,可以模拟浏览器操作,包括点击、输入、滚动等操作。通过Selenium可以加载网页中的动态内容,并获取到动态生成的数据。2. 使用R
2023-09-15

python批量爬取文档

最近项目需要将批量链接中的pdf文档爬下来处理,根据以下步骤完成了任务:将批量下载链接copy到text中,每行1个链接;再读txt文档构造url_list列表,利用readlines返回以行为单位的列表;利用str的rstrip方法,删除
2023-01-30

Python基于Selenium怎么实现动态网页信息的爬取

这篇文章主要介绍“Python基于Selenium怎么实现动态网页信息的爬取”,在日常操作中,相信很多人在Python基于Selenium怎么实现动态网页信息的爬取问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
2023-06-22

python如何爬取智能翻页批量下载文件

这篇文章主要介绍python如何爬取智能翻页批量下载文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4、嵌入式应用开
2023-06-14

Python 爬取网页中JavaScri

当我们进行网页爬虫时,我们会利用一定的规则从返回的 HTML 数据中提取出有效的信息。但是如果网页中含有 JavaScript 代码,我们必须经过渲染处理才能获得原始数据。此时,如果我们仍采用常规方法从中抓取数据,那么我们将一无所获。那么,
2023-01-30

python爬虫怎么批量爬取百度图片

这篇文章将为大家详细讲解有关python爬虫怎么批量爬取百度图片,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬
2023-06-14

Python爬虫:如何快速掌握Python爬虫核心技术,批量爬取网络图片

对于爬虫,很多伙伴首选的可能就是Python了吧,我们在学习Python爬虫的时候得有侧重点,这篇文章教大家如何快速掌握Python爬虫的核心!有不清楚的地方,可以留言!1. 概述本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片
2023-06-02

python如何爬取网页图片

要使用Python爬取网页图片,可以使用requests库来发送HTTP请求,然后使用beautifulsoup库或者正则表达式来解析网页内容,最后使用urllib库来下载图片。下面是一个简单的示例代码,可以爬取指定网页的所有图片并保存到本
2023-08-20

使用 Python 爬取网页数据

1. 使用 urllib.request 获取网页urllib 是 Python 內建的 HTTP 库, 使用 urllib 可以只需要很简单的步骤就能高效采集数据; 配合 Beautiful 等 HTML 解析库, 可以编写出用于采集网络
2023-01-31

python怎么爬取豆瓣网页

这篇文章主要介绍了python怎么爬取豆瓣网页,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python 语法简要介绍python 的基础语法大体与c语言相差不大,由于省去了
2023-06-14

Python怎么用requests模块实现动态网页爬虫

小编给大家分享一下Python怎么用requests模块实现动态网页爬虫,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!开发工具Python版本: 3.6.4相关模块:urllib模块;random模块;requests模块
2023-06-29

如何用python爬取网页数据

要用Python爬取网页数据,可以使用Python的一些库和模块,例如requests、BeautifulSoup和Scrapy等。下面是一个简单的示例,使用requests和BeautifulSoup库来爬取网页数据:```pythoni
2023-10-12

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录