动态网页数据挖掘一例

Web数据挖掘综述 1.     基于WEB 数据挖掘的分类 根据挖掘的对象不同我们可以把基于WEB 的数据挖掘分为三大类: ²  基于WEB 内容的挖掘(WebContent Mining) ²  基于WEB 结构的挖掘(WebStructure Mining) ²  基于WEB 使用的挖掘(WebUsage Mining) 1)      基于WEB 内容的挖掘        所谓基于WEB 内容的挖 阅读详情

这次的网址是:中国土地市场网

我需要这个网站里面每个链接点开之后的信息,并将这些信息整合到一个csv文件中。网页一共有200页,每页30条记录,共计6000条记录。


#coding:utf8
from bs4 import BeautifulSoup as sp
import urllib2
import pandas as pd
from pandas import DataFrame as df
import os
import re
import time

from selenium import webdriver

def alpha(x):
    return filter(str.isalpha,x)
def num(x):
    return filter(str.isdigit,x)

我们以第一条记录点开后的网址为例: 第一条记录,确定存放最终结果的DataFrame如下:

cols=['宗地标识:','宗地编号:','所在行政区:','宗地座落:','土地面积:','土地他项权利人证号:','土地使用权证号:','土地抵押人名称:','土地抵押人性质:','土地抵押权人:','抵押土地用途:','抵押土地权属性质与使用权类型:','抵押面积(公顷):','评估金额(万元):','抵押金额(万元):','土地抵押登记起始时间:','土地抵押登记结束时间:']
a=df(columns=cols,index=range(30))

因为数据均为中文,所以记得要在程序开头加上utf8编码,不然会乱码(其实乱码也没有关系,存入csv文件里面之后改一下编码格式依然是可读的)


首先,我们先来写一个函数,这个函数会将一个具体链接的网址中数据抓出来,并写入一个DataFrame中去。因为每条记录所在的网址打开后比较简单,是一个静态的html,没什么多说的:

def SingleRecord(trs,count,daf):
    ''' Return the dataframe after a new record is detected
                           这里的trs代表着html网页里面的tr元素的合集,由main函数传入,daf就是目标DataFrame,count是记录的条数,从0到5999
    '''
    tmp=[]
    for cnt,tr in enumerate(trs):
        rec=tr.text.split('\n')
        if cnt==0:
            pass
        if cnt==1:
            tmp.append(rec[2])
            tmp.append(rec[4])
        if cnt==2:
            tmp.append(rec[3])
        if cnt>2:
            tmp.append(rec[2])
            tmp.append(rec[4])
    daf.ix[count%30]=tmp
    if (count+1)%30==0:
        daf.to_csv(r"C:\Users\turmoil\Desktop\fuck\%s.csv"%(str((count+1)/30)),encoding='utf8')
        daf=df(columns=cols,index=range(30))
    return daf


接下来,我们需要做的是事情是对于每一页列表,我们要找到其中的30条记录的具体地址,这个直接从源代码中可以用beautifulsoup解析出来,如下所示:

def PageUrls(html):
    ''' get the effective urls in a page, it will return a list,此处的html即为包含30条记录地址的网页源码
    '''
    pat = re.compile(r'href="([^"]*)"') #过滤出里面存在的记录链接   
    base="http://www.landchina.com/"
    soup=sp(html)
    table=soup.find('table',id="TAB_contentTable")
    trs=table.findAll('tr')
    result=[]
    for tr in trs:
        h=pat.search(str(tr))
        if h:    
            href=h.group(1)
            result.append(base+href.replace(";","&"))
    return result

现在,我们可以根据记录的合集网页来获取每一条记录的具体地址了,并且可以通过地址来获取每一条记录。主要的事情看上去做完了,其实并没有。我们还需要遍历第1页到第200页中的所有页数,这个会比较麻烦,因为网页是动态的,所以需要处理一下JavaScript。从当前页跳到下一页时,需要点击页面上的“下页”
cur_page=1    
for i in range(cur_page,200):    
    browser.find_element_by_link_text("下页").click()
    cont=browser.page_source


到了这里,基本工作差不多都完成了,但是由于网页或者别的问题,在抓取过程中会经常遇到各种各样的错误。这个时候从断点处继续工作会比较重要,而发生断点的时候可能会在比较后面的页数,例如150页。如果用selenium模拟点“下页”来完成这个动作,需要点100多次,非常不方便。这个时候可以调用selenium的JavaScript处理方法来直接跳转到第150页,具体如下:

browser=webdriver.Chrome()
loc="http://www.landchina.com/default.aspx?tabid=351"
browser.get(loc)
go=browser.find_element_by_xpath("//input[@type='button']") 
browser.execute_script("QueryAction.GoPage('TAB',123,200)", go) # go按钮的JS代码是在网页的源码中分析出来的,在点击go这个按钮的时候,里面其实是传入了一个JS函数<input type="button" value="go" onclick="QueryAction.GoPage('TAB',this.previousSibling.value,200)"/>,因此可以模拟直接执行这个函数来进行页面跳转
content=browser.page_source


这个时候,再对上面跳转后的源代码应用PageUrls函数,即可在断点处继续开始,而不用从第一页开始了。
当断点出现需要重新开始时,载入之前的工作,

def reload(url):
    file_list=os.listdir(r"C:\Users\turmoil\Desktop\fuck")
    if file_list==[]:
        end=1
    else:
        file_list=[int(num(x)) for x in file_list]
    end=max(file_list)+1
    cycle=(end-1)/10
    browser=webdriver.Chrome()
    browser.get(url)
    print end-1,cycle
    if cycle==0:
        return browser,end
    
    for i in range(cycle):
        try:
            browser.find_elements_by_link_text("...")[-1].click()
        except:
            time.sleep(5)
            browser.refresh()
            browser.find_elements_by_link_text("...")[-1].click()
#         time.sleep(5)
    if str(end)[-1]!='1':
        browser.find_element_by_link_text(str(end)).click()
    return browser,end


这样,基本上元素都齐了,下面就是把这些合在一起的main函数啦:

def main(url,daf):
    browser,end=reload(url)
    content=browser.page_source
    urls=PageUrls(content)
    
    t=webdriver.Chrome()
    cur_page=end
    
    for k,web in enumerate(urls):
        t.get(web)
        html=t.page_source
        soup=sp(html)
        table=soup.find('table',id="FormView21_1")
        if table==None:
            time.sleep(8)
            t.refresh()
            html=t.page_source
            soup=sp(html)
            table=soup.find('table',id="FormView21_1")

        trs=table.findAll('tr')
        daf=SingleRecord(trs,k+(cur_page-1)*30,daf)
    
    for i in range(cur_page+1,201):    
        browser.find_element_by_link_text("下页").click()
        cont=browser.page_source
        try:
            ur=PageUrls(cont)
        except AttributeError:
            time.sleep(20)
            browser.refresh()
            time.sleep(8)
            browser.refresh()
            cont=browser.page_source
            ur=PageUrls(cont)
            
        cur_page=cur_page+1
        
        for j,w in enumerate(ur):
            t.get(w)
            html=t.page_source
            soup=sp(html)
            table=soup.find('table',id="FormView21_1")
            if table==None:
                time.sleep(20)
                t.refresh()
                time.sleep(8)
                t.refresh()
#                 t.get(w)
                html=t.page_source
                soup=sp(html)
                table=soup.find('table',id="FormView21_1")
                trs=table.findAll('tr')
                daf=SingleRecord(trs,(i-1)*30+j,daf)
                print (i-1)*30+j          
            else:
                trs=table.findAll('tr')
                daf=SingleRecord(trs,(i-1)*30+j,daf)
    browser.quit()
    t.quit()


其实这里面对网页出错的处理并不好,因为只是重新加载了一次。实际运行过程中可能需要加载多次。这个时候判断情况需要更改一下,用While循环做判断的话效率会更高。

if __name__=="__main__":
    url="http://www.landchina.com/default.aspx?tabid=351"
    main(url,a)




python爬虫:实现动态网页的爬取,以爬取视频为例 作为爬虫的初学者,网页越简单越好,因为网页的结构越简单,则组织框架更清晰,容易在程序中对所需要的元素进行寻找,当然,也有很多这样的网页存在,特别是静态网页,这样的网页十分适合初学来练习。但是实际应用中,需要面对的网页十分复杂,特别是一些动态网页,有登录、搜索、点击等一系列操作,那么这些需要有人工完成的任务,程序又该如何实现呢?若想实现:需要下载浏览器及其对应的驱动器,这里推荐EDGE或者谷歌浏览器,浏览器版本和驱动器版本要相互对应。谷歌浏览器的 驱动器下载链接微软驱动器下载链接。 阅读详情

相关推荐

Python 爬虫:获取网页数据的 5 种方法

requests:适用于简单的静态网页抓取,易于使用。requestslxml:适合需要高效解析大规模网页内容的情况,支持 XPath 和 CSS 选择器。Selenium:适用于动态网页(JavaScript 渲染)的抓取,模拟浏览器行为获取动态数据。Scrapy:强大的爬虫框架,适合大规模的网页抓取任务,支持异步请求和高级功能。PyQuery:基于 jQuery 语法,适合快速开发,提供简洁的 CSS 选择器语法。

想看什么文章都可以私信给我,综合性博客。 5513

『ChatGPT×Python』科研利器!手把手教你轻松实现爬取土地出让数据详情页!

因此,如果生成的代码与文章中不一致,也是可以运行的。当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

xiaoganbuaiuk的博客 2380

Python爬取动态网页中的图片

动态网页爬取是爬虫学习中的一个难点。本文将以知名插画网站pixiv为例,简要介绍动态网页爬取的方法。 写在前面 本代码的功能是输入画师的pixiv id,下载画师的所有插画。由于本人水平所限,所以代码不能实现自动登录pixiv,需要在运行时手动输入网站的cookie值。 重点:请求头 分析 创建文件夹 根据画师的id创建文件夹(相关路径需要自行调整)。 def makefolder(id): # 根据画师的id创建对应的文件夹 try: folder = os.path.join('E:\pixivi

m0_51908955的博客 1500

Web数据挖掘

关键字: 数据挖掘   引言数据挖掘(Data Mining,DM)是从大量数据中提取或“挖掘”知识,是从存放在数据库、数据仓库或其他信息库中的大量数据中挖掘有趣知识的过程。[1] 随着网络的不断发展,因特网目前已成为一个巨大的、分布广泛的和全球性的信息服务中心。从海量的网络信息中寻找有用的知识,早已成为人们的迫切需求。各种类似Google、Baidu等的搜索引擎也层出不穷,Web数据挖掘

bejge1121的专栏 2405

中国土地市场网爬取

实习期间老板需要对土地数据进行爬取,想来想去就Google到了.应该算是种类最齐全的土地数据了。Github地址:https://github.com/AnTi-anti/china_land/tree/master。

猫敷雪 5462

中国土地市场网数据爬取

最近,由于需求,又要继续爬取中国土地市场网的数据。打开网站,发现页面又更新了,所以得重新分析网页结构。 更新之后的页面如下: 地址:https://www.landchina.com/resultNotice 找到初始的页面接口 下面是POST提交的参数,当然写代码的时候不要忘记把header加上去。如果你设置的搜索条件更加严格,提交的参数也就越多。 点击进去,看下详情页,也是一个JSON格式的数据结构,这样就很清晰了。 总结,也就是对两个JSON接口进行处理,前提是POST的参数和HEADERS参

猫敷雪 3153

推荐项目:SeimiAgent,动态网页抓取新纪元

推荐项目:SeimiAgent,动态网页抓取新纪元 项目介绍 在大数据与爬虫技术日益发展的今天,SeimiAgent横空出世,犹如一位无头骑士,静悄悄地站在了动态网页抓取的前沿。它是一个独立运行的WebKit服务器,专为简化动态网页内容获取而生,让你在无需浏览器的情况下,也能轻松拿到那些JavaScript驱动的网页内容。 项目技术分析 SeimiAgent基于WebKit内核构建,这是Safar...

gitblog_00896的博客 497

landchina爬虫案例

本案例以土地市场为例,其实网站采集难度不大,但是一些细节值得学习。 链接:https://www.landchina.com/default.aspx?tabid=263 文章目录抓包分析参数定位模拟请求地区ID获取 抓包分析 POST接口:https://www.landchina.com/default.aspx?tabid=263 Requests-headers中没有动态参数。 Formdata中看起来也没有动态参数。不过有一个参数是 (unable to decode value) 也就是

李玺 4482

Python数据挖掘—爬虫基础

Python数据挖掘—爬虫基础正则表达式 正则表达式

我们都是被分成两半的人,一边热爱生活,一边憎恨生活。面对生活,我们总是在矛盾的两端摇摆,在反复的矛盾和犹豫中,一边踉跄前行,一边重振旗鼓。我渴望改变,渴望变得更好,渴望找到出口……就像一个溺水人的挣扎,就像一个救生圈。我是一个矛盾集合体,想要变得快乐,但是 543

中国土地市场网土地公告公示数据爬取系统

本文还有配套的精品资源,点击获取 简介:本系统利用Python爬虫技术,自动化获取中国土地市场网的土地公告公示信息,并存储在Redis数据库中。系统采用分布式爬取策略,提高效率,并考虑了异常处理和反反爬策略。通过分析网页结构,设计了数据模型,实现了公告公示信息的准确提取。系统可用于研究土地市场动态,并为数据分析和可视化提供支持。 1. Python爬虫技术介绍 ...

weixin_28487725的博客 2279

Web数据挖掘实战技术教程

本文还有配套的精品资源,点击获取 简介:刘兵教授编著的《Web数据挖掘》是为初学者准备的教材,涵盖了Web数据挖掘的基础知识和方法。这本书详细介绍了Web数据挖掘的三大主要分支:内容挖掘、结构挖掘和使用挖掘,阐述了HTML解析、文本预处理、主题模型构建、超链接分析、用户行为分析等关键技术。此外,还探讨了分类、关联规则、聚类和回归等数据挖掘技术,并介绍了Weka、Scikit...

weixin_42602368的博客 1422

Web数据挖掘及其在电子商务中的研究与应用

标题:Web数据挖掘及其在电子商务中的研究与应用内容:1.摘要 随着互联网的飞速发展,Web数据呈现出爆炸式增长,电子商务领域更是积累了海量数据。在此背景下,对Web数据进行有效挖掘并应用于电子商务具有重要意义。本研究旨在探索Web数据挖掘技术在电子商务中的应用方法和价值。通过采用数据挖掘算法、机器学习模型等方法,对电子商务平台的用户行为数据、交易数据等进行深入分析。结果表明,利用Web数据挖掘可以精准定位用户需求,提高商品推荐的准确率,例如将推荐准确率提升至80%以上,还能有效优化库存管理,降低库存成本约

Candy5204的博客 1480

Python网络数据挖掘技巧与动态网站抓取

本章深入探讨了使用Python进行网络数据挖掘的实用技巧,重点介绍了如何使用BeautifulSoup和requests库来抓取网络图片和视频,以及如何处理动态网站的数据抓取。特别强调了在进行网页数据抓取时,理解目标网页结构的重要性,并提供了相应的代码示例,展示了如何提取网页元数据、视频信息以及动态内容。本章也提出了在编写爬虫时应注意的问题,比如网站代码的频繁变动和登录信息的处理。

weixin_28487725的博客 522

论文阅读《智能动态爬虫在Web数据挖掘中的设计与应用》

论文《Design and application of intelligent dynamic crawler for web data mining》 Published in:2017 32nd Youth Academic Annual Conference of Chinese Association of Automation (YAC) ...

lianggyu的博客 1053

使用MFC进行网页抓取:静态与动态内容的提取

MFC(Microsoft Foundation Classes)是微软公司为了简化Windows应用程序开发而推出的一套C++类库。它封装了大部分Windows API,使得开发者可以更加专注于业务逻辑的实现,而无需从底层直接调用复杂的API。MFC通过提供一系列预定义的控件和应用程序框架,极大地简化了GUI(图形用户界面)的开发流程。网页抓取是指使用程序自动访问互联网上的网页,并从中提取所需信息的过程。它是数据挖掘、市场调研、竞争对手分析等领域的基础技术之一。

weixin_42578963的博客 1534

爬取中国土地市场网-土地公告公示

爬虫爬取爬取中国土地市场网-土地公告公示,使用redis数据库存储,分布式爬取列表详细信息。 1、使用Python开发,用到selenium

终极HTML5解析指南:gumbo-parser构建网页数据挖掘神器

在当今数据驱动的时代,高效解析HTML5内容成为网页数据挖掘的关键环节。gumbo-parser作为一款纯C99编写的HTML5解析库,以其轻量级设计和卓越性能,成为开发者处理网页数据的得力工具。无论是构建网络爬虫、分析网页结构,还是开发HTML处理工具,gumbo-parser都能提供稳定可靠的解析能力,帮助开发者轻松提取和处理网页中的有价值信息。 ## 为什么选择gumbo-parser?核

gitblog_00758的博客 825

爬取中国土地市场网上的土地交易信息

该资源可以爬取中国土地市场网上的土地交易信息,该爬虫程序用Python来编写,附件里有源代码和可执行文件。源代码可以根据自己的需要进行更改,可执行文件经过双击可一键启动,开展爬虫任务,最后的数据结果以excel表格数据的形式进行呈现。

上一篇: hasattr函数
下一篇: GhostScript应用一例:使用GhostScript强行修改加密PDF
Yeuing
博客等级 码龄13年 2粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值