python爬虫怎么获取动态的网页源码

author author     2023-05-04     249

关键词:

一个月前实习导师布置任务说通过网络爬虫获取深圳市气象局发布的降雨数据,网页如下:

心想,爬虫不太难的,当年跟zjb爬煎蛋网无(mei)聊(zi)图的时候,多么清高。由于接受任务后的一个月考试加作业一大堆,导师也不催,自己也不急。

但是,导师等我一个月都得让我来写意味着这东西得有多难吧。。。今天打开一看的确是这样。网站是基于Ajax写的,数据动态获取,所以无法通过下载源代码然后解析获得。

从某不良少年写的抓取淘宝mm的例子中收到启发,对于这样的情况,一般可以同构自己搭建浏览器实现。phantomJs,CasperJS都是不错的选择。

导师的要求是获取过去一年内深圳每个区每个站点每小时的降雨量,执行该操作需要通过如上图中的历史查询实现,即通过一个时间来查询,而这个时间存放在一个hidden类型的input标签里,当然可以通过js语句将其改为text类型,然后执行send_keys之类的操作。然而,我失败了。时间可以修改设置,可是结果如下图。

为此,仅抓取实时数据。选取python的selenium,模拟搭建浏览器,模拟人为的点击等操作实现数据生成和获取。selenium的一大优点就是能获取网页渲染后的源代码,即执行操作后的源代码。普通的通过 url解析网页的方式只能获取给定的数据,不能实现与用户之间的交互。selenium通过获取渲染后的网页源码,并通过丰富的查找工具,个人认为最好用的就是find_element_by_xpath("xxx"),通过该方式查找到元素后可执行点击、输入等事件,进而向服务器发出请求,获取所需的数据。

[python] view plain copy

    # coding=utf-8  

    from testString import *  

    from selenium import webdriver  

    import string  

    import os  

    from selenium.webdriver.common.keys import Keys  

    import time  

    import sys  

    default_encoding = 'utf-8'  

    if sys.getdefaultencoding() != default_encoding:  

    reload(sys)  

    sys.setdefaultencoding(default_encoding)  

    district_navs = ['nav2','nav1','nav3','nav4','nav5','nav6','nav7','nav8','nav9','nav10']  

    district_names = ['福田区','罗湖区','南山区','盐田区','宝安区','龙岗区','光明新区','坪山新区','龙华新区','大鹏新区']  

    flag = 1  

    while (flag > 0):  

    driver = webdriver.Chrome()  

    driver.get("hianCe/")  

    # 选择降雨量  

    driver.find_element_by_xpath("//span[@id='fenqu_H24R']").click()  

    filename = time.strftime("%Y%m%d%H%M", time.localtime(time.time())) + '.txt'  

    #创建文件  

    output_file = open(filename, 'w')  

    # 选择行政区  

    for i in range(len(district_navs)):  

    driver.find_element_by_xpath("//div[@id='" + district_navs[i] + "']").click()  

    # print driver.page_source  

    timeElem = driver.find_element_by_id("time_shikuang")  

    #输出时间和站点名  

    output_file.write(timeElem.text + ',')  

    output_file.write(district_names[i] + ',')  

    elems = driver.find_elements_by_xpath("//span[@onmouseover='javscript:changeTextOver(this)']")  

    #输出每个站点的数据,格式为:站点名,一小时降雨量,当日累积降雨量  

    for elem in elems:  

    output_file.write(AMonitorRecord(elem.get_attribute("title")) + ',')  

    output_file.write('\\n')  

    output_file.close()  

    driver.close()  

    time.sleep(3600)  

    文件中引用的文件testString只是修改输出格式,提取有效数据。

    [python] view plain copy

    #Encoding=utf-8  

    def OnlyCharNum(s, oth=''):  

    s2 = s.lower()  

    fomart = 'abcdefghijklmnopqrstuvwxyz0123456789,.'  

    for c in s2:  

    if not c in fomart:  

    s = s.replace(c, '')  

    return s  

    def AMonitorRecord(str):  

    str = str.split(":")  

    return str[0] + "," + OnlyCharNum(str[1])  


    一小时抓取一次数据,结果如下:
参考技术A 没有对方的管理员帐号密码是进不去的,除非黑进去。也就是说正常情况下,没有对方的放权你是不可能进去的

python爬虫之无法获取网页源码的解决方案详解(代码片段)

目录1引子2解决方案1引子对某网页数据爬取时, 键中  显示网页源码与鼠标右键 查看网页源代码显示的网页源码不同。图1:F12键中Elements显示的网页源码图2:鼠标右键->查看网页源代码显示的网页源码因此,... 查看详情

python爬虫之无法获取网页源码的解决方案详解(代码片段)

目录1引子2解决方案1引子对某网页数据爬取时, 键中  显示网页源码与鼠标右键 查看网页源代码显示的网页源码不同。图1:F12键中Elements显示的网页源码图2:鼠标右键->查看网页源代码显示的网页源码因此,... 查看详情

python爬虫-27-python之selenium入门,动态网页抓取

之前我们操作的对象都是静态网页,直接查看网页源代码即可,那么近几年动态网页的占有率越来越多,通过之前的方式不是那么方便的获取动态网页的内容,所以我们这里使用​​selenium​​,他是干啥的呢,简单的你可以理... 查看详情

python爬虫怎么获取下一页的url和网页内容

参考技术A用浏览器调试工具,如firebug,查看点击下一页时的http请求,再用python模拟就行了。 参考技术B获取下一页那个按钮的href属性,也就是下一页的链接 查看详情

如何用python爬虫抓取金融数据

...虫是是获取数据的一个重要渠道之一。鉴于此,我拾起了Python这把利器,开启了网络爬虫之路。本篇使用的版本为python3.5,意在抓取证券之星上当天所有A股数据。程序主要分为三个部分:网页源码的获取、所需内容的提取、所... 查看详情

python写爬虫怎么处理动态加载的网页,就是边拉动滚动条边加载的那种

普通方法只可以获得原始加载的部分,想全部获得数据可以用什么框架或者什么技术解决?有讲解的资料可以推荐就更好了,谢谢这个用phantomjs或者selenium都可以,这两个工具能模拟浏览器操作,就像你在操作浏览器一样,具体... 查看详情

nodejs爬虫入门

1.写在前面往常都是利用Python/.NET语言实现爬虫,然现在作为一名前端开发人员,自然需要熟练NodeJS。下面利用NodeJS语言实现一个糗事百科的爬虫。另外,本文使用的部分代码是es6语法。实现该爬虫所需要的依赖库如下。request:利... 查看详情

怎么用python爬虫爬取可以加载更多的网页

...过,只是借助爬虫框架pyspider结合PhantomJS,这样就可以在python里面嵌入一些js代码,实现点击,下拉等操作啦。本回答被提问者采纳 查看详情

python怎么抓取渲染后的页面

...后的页面。因为渲染这个工作是浏览器完成的。而你通过python脚本抓取到的内容仅仅是html、css、js等源码。对于一些需要js异步加载的内容获取,通常是先获取相关源码,然后参考js源码,利用python伪造一个请求(带上所需的参... 查看详情

python网络爬虫技巧小总结,静态动态网页轻松爬取数据

很多人学用python,用得最多的还是各类爬虫脚本:有写过抓代理本机验证的脚本,有写过自动收邮件的脚本,还有写过简单的验证码识别的脚本,那么我们今天就来总结下python爬虫抓站的一些实用技巧。 静态网页对于静态网... 查看详情

python爬虫踩坑教程(代码片段)

我们的目标是爬取下面这个个网址上的2010~2018年的数据http://stockdata.stock.hexun.com/zrbg/Plate.aspx?date=2015-12-31获取我们需要的表格中的某些列的数据?(这是我从我的微信公众号帮过来的文章)第一步,我们首先用谷歌浏览器查看网页... 查看详情

爬虫之动态获取数据(代码片段)

一.图片懒加载图片懒加载概念: 图片懒加载是一种网页优化技术。图片作为一种网络资源,在被请求时也与普通静态资源一样,将占用网络资源,而一次性将整个页面的所有图片加载完,将大大增加页面的首屏加载时间。... 查看详情

用爬虫抓取网页得到的源代码和浏览器中看到的不一样运用了啥技术?

...代码获取,需要通过浏览器进行渲染后才能看到。当使用爬虫抓取网页时,一般只能获取到网页源代码,而无法获取到经过浏览器渲染后的页面内容。如果要获取经过浏览器渲染后的内容,需要使用一个浏览器渲染引擎(如Seleni... 查看详情

python开发爬虫之动态网页抓取篇:爬取博客评论数据

以爬取《Python网络爬虫:从入门到实践》一书作者的个人博客评论为例。网址:http://www.santostang.com/2017/03/02/hello-world/1)“抓包”:找到真实的数据地址 右键点击“检查”,点击“network”,选择“js”。刷新一下页面,选中... 查看详情

python网络爬虫学习手记——爬虫基础

1、爬虫基本概念网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。--------百度百科简单的说,爬虫就是获取目标网页源... 查看详情

如何用python爬虫抓取js动态筛选内容

打开浏览器,以googlechrome为例,输入你上面的网址。然后按F12打开调试窗口,然后尝试勾选左边某一个选项,马上可以看到右边的调试窗口有东西输出。找到第一个输出的行,点击header,可以看到每一个都是用的post方法。所以... 查看详情

爬虫系列之解决动态数据获取

  有时候,我们天真无邪的使用urllib库或Scrapy下载HTML网页时会发现,我们要提取的网页元素并不在我们下载到的HTML之中,尽管它们在浏览器里看起来唾手可得。   这说明我们想要的元素是在我们的某些操作下... 查看详情

python爬虫能做啥

Python是一门非常适合开发网络爬虫的编程语言,相比于其他静态编程语言,Python抓取网页文档的接口更简洁;相比于其他动态脚本语言,Python的urllib2包提供了较为完整的访问网页文档的API。此外,python中有优秀的第三方包可以高... 查看详情