`
猜不透
  • 浏览: 133375 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

模拟post请求抓取网页资源数据,用正则表达式获取有用数据

阅读更多

       最近公司要求做抓取网站资源数据的功能,而且需要将返回的数据进行分类,只返回有用的数据,这就需要用到正则表达式,运用下列代码实现了上述功能,这是个.NET webservice实现的功能,希望对以后有同样需求的兄弟提供帮助。

ps:正则表达式写的不太好,应该会有更好更简洁的方式满足需求,希望大牛赐教。

 

 

 

[WebMethod]
        public String getResourceSearchMsg(String cityId,String pageNo)
        {
            try
            {
                WeiXinBase.HttpNetRequest request = new WeiXinBase.HttpNetRequest();
                StringBuilder sbuilder = new StringBuilder();
                sbuilder.Append("url");
                if (cityId != null && !"".Equals(cityId))
                {
                    sbuilder.Append("&super_id=" + cityId);
                }
                if (pageNo == null || "".Equals(pageNo))
                {
                    sbuilder.Append("&dev_page_number = 0");
                }
                else
                {
                    sbuilder.Append("&dev_page_number = " + pageNo);
                }
                request.Url = sbuilder.ToString();
                request.Senddata = "super_id=10";
                request.RMethod = WeiXinBase.Method.POST;

                //模拟发送url请求返回的数据
                String message = request.PageRequest();
                //过滤\n 转换成空
                String withoutNString = message.Replace("\n", "");
                //过滤\r 转换成空
                String withoutRString = withoutNString.Replace("\r", "");
                //过滤\t 转换成空
                String withoutTString = withoutRString.Replace("\t", "");
                //过滤\ 转换成空
                String newString = withoutTString.Replace("\\", "");
                //获取html中的body标签
                String bodyStr = Regex.Match(newString, @"<body.*>.*</body>").ToString();
                //过滤注释
                String result2 = Regex.Replace(bodyStr, @"<!--(?s).*?-->", "", RegexOptions.IgnoreCase);
                //过滤nbsp标签
                String result3 = Regex.Replace(result2, @"&nbsp;", "", RegexOptions.IgnoreCase);
                //获取body中的所有table
                Regex regex = new Regex(@"<table.*?>[\s\S]*?<\/table>");
                MatchCollection mc = regex.Matches(result3);
                //获取集合类中自己需要的某个table
                String newHtmlStr = mc[3].ToString();
                //将数据返回
                //Response.Write(newHtmlStr);
                return newHtmlStr;
            }
            catch (Exception ex)
            {

                return ex.Data.ToString();
            }
           
        }

 

 

 

以下是获取到的html数据,数据进行过删减,红色部分是有用的数据

 

<table width="80%" border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td width="4">
            <img src="img/t-l.png" width="4" height="26" />
        </td>
        <td>
            <div class="inquire-t1">
                <img src="img/inquire.gif" width="16" height="16" align="absmiddle" />
                查询区
            </div>
        </td>
        <td width="4">
            <img src="img/t-r.png" width="4" height="26" />
        </td>
    </tr>
</table>


<div class="inquire-content">
    <FORM name="searchForm" action="resource_anticipation_query_bss1.jsp"
    method=post>
        <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr height="30">
                <td>
                    <input name="viewNumber" type="text" id="viewNumber" value="" />
                    <input type="button" name="button1" id="button1" value="装机地址查询" onclick="queryAll();"
                    />
                </td>
            </tr>
        </table>
    </FORM>
</div>
</div>




<table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td valign="top">
            <div id="tab">
                <div class="Menubox">
                    <ul>
                        <li id="one1" onclick="setTab('one',1,3)" class=hover>
                            分线盒地址
                        </li>
                        <li id="one2" onclick="setTab('one',2,3)" class=null>
                            已有用户地址
                        </li>
                        <li id="one3" onclick="setTab('one',3,3)" class=null>
                            在建社区
                        </li>
                    </ul>
                </div>
                <div class="Contentbox">
                    <div id="con_one_1" class=hover style=0>
                        <table width="90%" border="0" cellspacing="0" align="left">
                            <form name="title1" action="#" method="post">
                                <input type="hidden" name="super_id" value="10" />
                                <input id="dev_all_page" type="hidden" name="dev_all_page" value="6128"
                                />
                            </form>
                        </table>
                        <div class="clear">
                        </div>
                        <hr>


                        <table width="98%" border="0" cellspacing="0" cellpadding="3">
                            <tr>
                                <td align="left" width="5%" height="22">
                                    设备类型
                                </td>
                            </tr>
                            <tr bgcolor="E1FFFF">
                                <td align="left" id="A_0">
                                    LAN
                                </td>
                            </tr>
                        </table>


                    </div>
                    <div id="con_one_2" class=null style=display:none>
                        <table width="90%" border="0" cellspacing="0" align="left">
                            <form name="title2" action="#" method="post">
                                <input type="hidden" name="super_id" value="10" />
                                <input type="hidden" name="partition_code" value="null" />
                                <input type="hidden" name="zone_cd" value="020" />
                                <tr align=left height=25>
                                    <td class="noth" width='23%' align=left>
                                        共819709项 第1 到20项
                                    </td>
                                </tr>
                            </form>
                        </table>
                        <div class="clear">
                        </div>
                        <hr>
                        <table width="80%" border="0" cellspacing="0" cellpadding="3">
                            <tr>
                                <td align="left" width="10%" height="22">
                                    设备类型
                                </td>
                            </tr>
                            
                        </table>
                    </div>
                    <div id="con_one_3" class=null style=display:none>
                        <table width="90%" border="0" cellspacing="0" align="left">
                        </table>
                    </div>
                </div>
            </div>
            </td>
    </tr>
</table>

 

 

分享到:
评论

相关推荐

    Python代码源码-实操案例-框架案例-通过正则表达式快速获取电影的下载地址.zip

    在本实践案例中,我们将深入探讨如何利用Python编程语言,结合正则表达式这一强大的文本处理工具,来高效地从网页中抓取电影的下载链接。这个案例涉及到的知识点广泛,包括Python的基础语法、网络爬虫原理以及正则...

    PYTHON思维导图-基础篇+入门爬虫篇(含正则表达式)PythonXMind.zip

    2. **Requests**:用于发送HTTP请求,获取网页内容,支持GET、POST等方法。 3. **Scrapy**:一个强大的爬虫框架,可以构建复杂的爬虫项目,包括中间件、爬虫管道等。 4. **Selenium**:模拟浏览器行为,用于动态...

    易语言双色球开奖数据采集

    获取到的网页内容可能包含HTML代码,我们需要使用字符串处理函数或者正则表达式来解析HTML,提取出开奖号码。此外,如果开奖数据是JSON格式,可以使用易语言的JSON解析库进行解析。 在实际操作中,我们可能会遇到...

    jmeter设置全局变量与正则表达式提取器过程图解

    总之,JMeter的全局变量和正则表达式提取器是接口测试中的强大工具,能够帮助我们有效地管理和复用接口请求所需的数据。通过理解和熟练运用这些功能,你可以更高效地完成复杂的接口测试任务。希望本文的讲解对你在...

    csharp仿爬虫抓取网页内容

    在这个项目中,正则表达式被用来从抓取的网页源代码中提取所需的数据,例如公司的名称、职位等。需要注意的是,由于网页结构可能会变化,所以这些正则表达式需要定期更新以适应网站的变动。 在实际应用中,我们可能...

    delphi 批量抓取页面E-MAIL 源码

    在实际应用中,为了防止被目标网站识别为恶意爬虫,开发者可能会添加一些策略,比如设置延迟请求间隔、模拟浏览器行为(添加User-Agent头)、随机使用代理IP等。 最后,源码中可能还包含了错误处理和结果展示部分。...

    网页数据抓取

    这个文件可能包含了具体的抓取逻辑,如使用正则表达式、BeautifulSoup或者更现代的库如Scrapy来解析HTML并提取所需数据。 而`WinFormTest.sln`则可能是一个Windows Forms应用程序的解决方案文件,通常用于开发桌面...

    python零基础学习篇课程资料-CLASSDATA_ch08数据爬虫技巧_week2(补充了正则).zip

    通过这个“python零基础学习篇课程资料”,你将能够构建起自己的第一个Python爬虫,理解网络数据抓取的基本流程,熟练使用正则表达式处理文本数据,为后续的Python开发和数据分析打下坚实的基础。在学习过程中,记得...

    PHP使用Curl实现模拟登录及抓取数据功能示例

    在PHP开发中,有时我们需要获取一些需要用户登录后才能访问的网页内容,此时可以借助Curl库来模拟登录过程并抓取数据。Curl库是一个强大的URL处理工具,支持多种协议,包括HTTP、HTTPS等,它能让我们在PHP中发送HTTP...

    e语言-易语言获取趣头条文章链接

    本压缩包中的内容是关于使用易语言来实现获取趣头条文章链接的源码示例,这涉及到网络编程和正则表达式两个重要的知识点。 首先,我们要理解易语言中的网络编程。在易语言中,可以使用内置的网络模块进行HTTP请求,...

    php应用curl扩展抓取网页类.zip

    2. **设置cURL选项**:为了抓取网页,类可能会使用`curl_setopt()`来配置cURL,例如设置`CURLOPT_RETURNTRANSFER`为true,这样cURL不会直接输出数据,而是将结果存储在变量中。其他可能的选项包括`CURLOPT_...

    网页抓取小工具

    网页抓取小工具,顾名思义,是一种用于获取网页数据的实用软件,它使得学习网站制作的初学者能够轻松地研究和分析其他网站的设计、布局以及所使用的资源。在这个数字化时代,理解并掌握如何有效地从互联网上获取信息...

    Python数据抓取技术与实战.pdf

    正则表达式是处理字符串的强大工具,常用于匹配网页中的数据模式。Python中通过re模块可以方便地运用正则表达式。 5. 动态内容抓取: 一些网页内容是通过JavaScript动态加载的。传统的库可能无法处理这种情况,这...

    数据采集 打包资源5个 c# .net sharp

    在网页数据采集时,开发者经常用正则表达式匹配和提取特定格式的文本,如URL、电子邮件地址、日期等。 6. **Form数据**:在Web应用中,表单数据通常是用户输入的数据,通过POST或GET方法提交到服务器。在数据采集时...

    网页数据整合

    3. **正则表达式**:在提取特定格式的数据时,正则表达式(Regular Expression)非常有用。它可以匹配和提取字符串模式,例如邮箱、电话号码或日期等。 4. **JavaScript执行**:许多现代网页使用JavaScript来动态...

    模拟用户登录保存登录状态抓取数据.pdf

    根据提供的文件信息,本文将围绕模拟用户登录、保存登录状态以及数据抓取的知识点展开详述。为了便于理解,文章将分几个部分进行阐述:HTTP请求与响应、模拟登录过程、维持会话状态、数据抓取与处理。 ### HTTP请求...

    Python-淘宝天猫商品数据抓取代码和exe都在里面

    3. 正则表达式:配合re库,使用正则表达式匹配和提取特定格式的数据。 4. 多线程/异步IO:为了提高爬取效率,可以使用多线程或多进程,或者使用异步库如asyncio。 三、淘宝天猫反爬策略应对 1. 用户代理:设置不同...

    初级的用php写的采集程序

    标题和描述中提到的“初级的用PHP写的采集程序”是指使用PHP编程语言编写的一种简单的网页数据抓取工具。这种程序通常被用于从互联网上自动收集特定类型的信息,如图片、文章内容等,以供进一步分析或存储。下面将...

    python爬虫实例.rar

    Python爬虫是一种自动抓取互联网信息的程序,通过模拟浏览器请求和响应,从网页中提取有价值的数据。Python爬虫在数据采集领域广泛应用,因其高效、易学的特点备受青睐。 Python爬虫的架构主要由五个部分组成:调度...

    web程序抓取各个网站的数据

    通过设置URL、请求方法(GET或POST)、参数和头部信息,你可以模拟浏览器的行为获取网页。 2. **HTML解析**:网页通常以HTML格式返回,需要解析这些HTML代码以找到目标数据。可以使用解析库,如Python的`...

Global site tag (gtag.js) - Google Analytics