数据抓取的一个类,包含一些常用的方法

原文:数据抓取的一个类,包含一些常用的方法

using System;
using System.Configuration;
using System.IO;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;

namespace XXX
{
    /// <summary>
    /// Func 的摘要说明。
    /// </summary>
    public class Func
    {
        public CookieContainer myCookieContainer = new CookieContainer();

public void SetCookie(string cookieStr, string domain)
        {
            string[] cookstr = cookieStr.Split(‘;‘);
            foreach (string str in cookstr)
            {
                string[] cookieNameValue = str.Split(‘=‘);
                Cookie ck = new Cookie(cookieNameValue[0].Trim().ToString(), cookieNameValue[1].Trim().ToString());
                ck.Domain = domain;
                myCookieContainer.Add(ck);
            }
        }

public string GetPage(string PageUrl)
        {
            return GetPage(PageUrl, Encoding.Default);
        }

public string GetPage(string PageUrl, Encoding encoding)
        {
            string backstr = string.Empty;
            try
            {
                //System.Net.WebRequest  request = System.Net.WebRequest.Create(PageUrl);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(PageUrl);
                request.CookieContainer = myCookieContainer;

request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)";
                System.Net.WebResponse response = request.GetResponse();
                System.IO.Stream resStream = response.GetResponseStream();
                resStream.ReadTimeout = 8000;
                System.IO.StreamReader sr = new System.IO.StreamReader(resStream, encoding);
                backstr = sr.ReadToEnd();
                resStream.Close();
                sr.Close();
            }
            catch (Exception ex)
            {
                Log.WriteError(ex.Message);
                backstr = "";
            }
            return backstr;
        }

public string PostPage(string PageUrl, string postData)
        {
            ASCIIEncoding encoding = new ASCIIEncoding(); 
            byte[] data = encoding.GetBytes(postData);

HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(PageUrl);
            myRequest.Method = "POST";
            myRequest.ContentType = "application/x-www-form-urlencoded";
            myRequest.ContentLength = data.Length;
            Stream newStream = myRequest.GetRequestStream();
            // Send the data. 
            newStream.Write(data, 0, data.Length);
            newStream.Close();
            // Get response 
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
            StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.Default);
            string content = reader.ReadToEnd();
            reader.Close();
            return content;
        }

public string[] StrSplit(string mystr, string splitstr)
        {
            string str = mystr.Replace(splitstr, "\x254");
            string[] backstring = str.Split(‘\x254‘);
            return backstring;
        }

public string Cutstr(string mystr, string str1, string str2)
        {
            string backstr = string.Empty;
            int strstart = 0;
            int strend = mystr.Length;

if (str1 != "")
                strstart = mystr.IndexOf(str1);
            if (str2 != "")
                strend = mystr.IndexOf(str2, strstart + str1.Length);
            if (strstart != -1 && strend != -1)
                backstr = mystr.Substring(strstart + str1.Length, strend - strstart - str1.Length);
            else
                backstr = "-1";
            return backstr;
        }

public string ReplaceFirst(string mystr, string oldstr, string newstr)
        {
            string backstr = mystr;
            int oldindex = mystr.IndexOf(oldstr);
            if (oldindex > -1)
            {
                backstr = backstr.Remove(oldindex, oldstr.Length);
                backstr = backstr.Insert(oldindex, newstr);
            }
            return backstr;
        }

public void writetxt(string pathstr, string content)
        {
            FileStream fs = new FileStream(pathstr, FileMode.Create, FileAccess.Write);
            StreamWriter sw = new StreamWriter(fs, Encoding.UTF8);
            sw.Write(content);
            sw.Close();
            fs.Close();
        }

public string readtxt(string pathstr)
        {
            string tmpstr = string.Empty;
            FileStream fs = new FileStream(pathstr, FileMode.Open, FileAccess.Read);
            StreamReader sr = new StreamReader(fs, Encoding.UTF8);
            tmpstr = sr.ReadToEnd();
            sr.Close();
            fs.Close();
            return tmpstr;
        }

public string FilterLink(string str)
        {
            string tmpstr = str;
            Regex re = new Regex(@"<a[^>]*href=(""(?<href>[^""]*)""|‘(?<href>[^‘]*)‘|(?<href>[^\s>]*))[^>]*>(?<text>.*?)</a>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
            MatchCollection mc = re.Matches(tmpstr);
            for (int i = 0; i < mc.Count; i++)
            {
                tmpstr = tmpstr.Replace(mc[i].Value, mc[i].Groups["text"].Value);
            }
            return tmpstr;
        }

}
}

数据抓取的一个类,包含一些常用的方法

时间: 2024-10-24 17:19:11

数据抓取的一个类,包含一些常用的方法的相关文章

大数据抓取采集框架(摘抄至http://blog.jobbole.com/46673/)

摘抄至http://blog.jobbole.com/46673/ 随着BIG DATA大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前.如何能够做到所见即所得的无阻拦式采集.如何快速把不规则页面结构化并存储.如何满足越来越多的数据采集还要在有限时间内采集.这篇文章结合我们自身项目经验谈一下. 我们来看一下作为人是怎么获取网页数据的呢? 1.打开浏览器,输入网址url访问页面内容.2.复制页面内容的标题.作者.内容.3.存储到文本文件或者excel. 从技术角度来说整个过程

Hibernate学习---第十一节:Hibernate之数据抓取策略&amp;批量抓取

1.hibernate 也可以通过标准的 SQL 进行查询 (1).将SQL查询写在 java 代码中 /** * 查询所有 */ @Test public void testQuery(){ // 基于标准的 sql 语句查询 String sql = "select * from t_person"; // 通过 createSQLQuery 获取 SQLQuery,而 SQLQuer 是 Query的子类 SQLQuery query = session.createSQLQue

Android MaoZhuaWeiBo 好友动态信息列表数据抓取 -3

前面2篇把大致的开发说的差不多了,接下来说说粉丝动态消息列表或时间线数据的抓取与解析显示,我将他全部写在了一个 类里,并以封装类对象的形式存储数据,下面看看主要的服务代码: 粉丝动态消息列表数据抓取: package com.neweriweibo.service; /** * 用户消息列表 * @author Engineer-Jsp * @date 2014.10.29 * */ import java.io.BufferedReader; import java.io.InputStrea

实现多进程爬虫的数据抓取

要实现多进程爬虫的数据抓取,要用到库multiprocessing并导入Pool: from multiprocessing import Pool 接着导入进程池 pool = Pool(processes = 4) #processes后接打开进程的数,与电脑核数有关,不加即自动分配.pool.map(get_all_links_from,channel_list.split()) 所有的程序会被放到进程池Pool()中并分配CPU. 此处用到了map函数,map函数会根据提供的函数对指定序

Ajax异步数据抓取

1.简介 1 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样,在浏览 2 器中可以看到正常显示的页面数据,但是使用requests得到的结果并没有.这是因为requests获取的 3 都是原始的HTML文档,而浏览器中的页面则是经过JavaScript处理数据后生成的结果,这些数据的 4 来源有多种,可能是通过ajax加载的,可能是包含在HTML文档中的,也可能是经过JavaScript和特 5 定算法计算后生成的. 6 对于第一种情况,数据加载是一种异步加

爬虫---selenium动态网页数据抓取

动态网页数据抓取 什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面.因为传统的在传输数据格式方面,使用的是XML语法.因此叫做AJAX,其实现在数据交互基本上都是使用JSON.使用AJAX加载的数据,即使使用了JS,将数

第四章爬虫进阶之动态网页数据抓取

动态网页数据抓取 什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面.因为传统的在传输数据格式方面,使用的是XML语法.因此叫做AJAX,其实现在数据交互基本上都是使用JSON.使用AJAX加载的数据,即使使用了JS,将数

Python爬虫新手教程:微医挂号网医生数据抓取

1. 写在前面 今天要抓取的一个网站叫做微医网站,地址为 https://www.guahao.com ,我们将通过python3爬虫抓取这个网址,然后数据存储到CSV里面,为后面的一些分析类的教程做准备.本篇文章主要使用的库为pyppeteer 和 pyquery 首先找到 医生列表页 https://www.guahao.com/expert/all/全国/all/不限/p5 这个页面显示有 75952 条数据 ,实际测试中,翻页到第38页,数据就加载不出来了,目测后台程序猿没有把数据返回,

Fiddler微信公众号列表、浏览/查看量、评论数据抓取

按之前的文章我们已经可以获取app及网页的https/http请求的json数据: https://www.cnblogs.com/i-love-python/p/11505669.html 在此基础上可对微信公众号文章数据进行抓取. 包括列表.浏览查看量.评论数据. 列表数据: 列表数据获取 列表为每个公众号历史数据入口,如图红框中的2部分. 列表数据可通过Fiddler在微信PC客户端获取,获取的数据是json数据里面包含了文章标题,发布时间等信息. 这个列表信息是一个类似下面url的GET