mini爬虫程序

简介:
复制代码
Code
class MiniCrawler
    {
        
// Find a link in a content string.
        static string FindLink(string htmlstr, ref int startloc)
        {
            
int i;
            
int start, end;
            
string uri = null;
            
string lowcasestr = htmlstr.ToLower();
            i 
= lowcasestr.IndexOf("href=\"http", startloc);
            if (i != -1)
            {
                start 
= htmlstr.IndexOf('"', i) + 1;
                end 
= htmlstr.IndexOf('"', start);
                uri 
= htmlstr.Substring(start, end - start);
                startloc 
= end;
            }
            
return uri;

        }
        
public static void Crawle(string uristr)
        {
            
string link = null;
            
string str;
            
string answer;
            
int curloc; // holds current location in response
            try
            {
                
do
                {
                    Console.WriteLine(
"Linking to " + uristr);
                    
// 创建一个指定URI的WebRequest
                    HttpWebRequest req = (HttpWebRequest)
                    WebRequest.Create(uristr);

                    
// 发送reques得到返回的response.
                    HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                    
// 从返回的内容中获得数据流
                    Stream istrm = resp.GetResponseStream();

                    StreamReader rdr 
= new StreamReader(istrm);
                    
// 读取整个页面
                    str = rdr.ReadToEnd();
                    curloc 
= 0;
                    
do
                    {
                        
// 查找下一个uri
                        link = FindLink(str, ref curloc);
                        
if (link != null)
                        {
                            Console.WriteLine(
"发现链接: " + link);
                            Console.Write(
"Link, More, Quit?");
                            answer 
= Console.ReadLine();
                            
if (string.Compare(answer, "L"true== 0)
                            {
                                uristr 
= string.Copy(link);
                                
break;
                            }
                            
else if (string.Compare(answer, "Q"true== 0)
                            {
                                
break;
                            }
                            
else if (string.Compare(answer, "M"true== 0)
                            {
                                Console.WriteLine(
"Searching for another link.");
                            }
                        }
                        
else
                        {
                            Console.WriteLine(
"No link found.");
                            
break;
                        }
                    } 
while (link.Length > 0);
                    
// Close the response.
                    resp.Close();
                } 
while (uristr != null);
            }
            
catch (WebException exc)
            {
                Console.WriteLine(
"Network Error: " + exc.Message +
                
"\nStatus code: " + exc.Status);
            }
            
catch (ProtocolViolationException exc)
            {
                Console.WriteLine(
"Protocol Error: " + exc.Message);
            }
            
catch (UriFormatException exc)
            {
                Console.WriteLine(
"URI Format Error: " + exc.Message);
            }
            
catch (NotSupportedException exc)
            {
                Console.WriteLine(
"Unknown Protocol: " + exc.Message);
            }
            
catch (IOException exc)
            {
                Console.WriteLine(
"I/O Error: " + exc.Message);
            }
            Console.WriteLine(
"Terminating MiniCrawler.");
        }
    }
复制代码
相关文章
|
数据采集 存储 JSON
使用Perl脚本编写爬虫程序的一些技术问题解答
使用Perl脚本编写爬虫程序的一些技术问题解答
|
7月前
|
数据采集 人工智能 数据可视化
Scala多线程爬虫程序的数据可视化与分析实践
Scala多线程爬虫程序的数据可视化与分析实践
|
4月前
|
数据采集 Web App开发 测试技术
如何避免反爬虫程序检测到爬虫行为?
这段内容介绍了几种避免被反爬虫程序检测的方法:通过调整请求频率并遵循网站规则来模拟自然访问;通过设置合理的User-Agent和其他请求头信息来伪装请求;利用代理IP和分布式架构来管理IP地址;以及采用Selenium等工具模拟人类的浏览行为,如随机点击和滚动页面,使爬虫行为更加逼真。这些技巧有助于降低被目标网站识别的风险。
|
3月前
|
数据采集 Python
微博爬虫程序的定时
微博爬虫程序的定时
34 1
|
5月前
|
机器学习/深度学习 数据采集 自然语言处理
Python实现循环神经网络SimpleRNN、LSTM进行淘宝商品评论情感分析(含爬虫程序)
Python实现循环神经网络SimpleRNN、LSTM进行淘宝商品评论情感分析(含爬虫程序)
Python实现循环神经网络SimpleRNN、LSTM进行淘宝商品评论情感分析(含爬虫程序)
|
6月前
|
数据采集 XML 存储
技术经验分享:C#构造蜘蛛爬虫程序
技术经验分享:C#构造蜘蛛爬虫程序
40 0
|
7月前
|
数据采集 缓存 算法
使用Python打造爬虫程序之Python中的并发与异步IO:解锁高效数据处理之道
【4月更文挑战第19天】本文探讨了Python中的并发与异步IO,区分了并发(同时处理任务)与并行(同时执行任务)的概念。Python的多线程受限于GIL,适合IO密集型任务,而多进程适用于CPU密集型任务。异步IO通过非阻塞和回调/协程实现高效IO,Python的asyncio库提供了支持。应用场景包括Web开发和网络爬虫等。实践指南包括理解任务类型、使用asyncio、避免阻塞操作、合理设置并发度和优化性能。理解并运用这些技术能提升Python程序的效率和性能。
|
7月前
|
数据采集 XML 数据挖掘
使用Python打造爬虫程序之HTML解析大揭秘:轻松提取网页数据
【4月更文挑战第19天】本文介绍了HTML解析在爬虫技术中的重要性,并通过Python的BeautifulSoup库展示了如何解析和提取数据。文章涵盖了HTML文档结构、使用BeautifulSoup的基本方法,如`find_all()`、选择器(标签、类、ID选择器)以及提取文本、属性和链接。此外,还讨论了遍历和处理嵌套元素的技巧。
|
7月前
|
数据采集 JavaScript 前端开发
使用Python打造爬虫程序之破茧而出:Python爬虫遭遇反爬虫机制及应对策略
【4月更文挑战第19天】本文探讨了Python爬虫应对反爬虫机制的策略。常见的反爬虫机制包括User-Agent检测、IP限制、动态加载内容、验证码验证和Cookie跟踪。应对策略包括设置合理User-Agent、使用代理IP、处理动态加载内容、验证码识别及维护Cookie。此外,还提到高级策略如降低请求频率、模拟人类行为、分布式爬虫和学习网站规则。开发者需不断学习新策略,同时遵守规则和法律法规,确保爬虫的稳定性和合法性。
|
7月前
|
数据采集 监控 前端开发
使用Python打造爬虫程序之入门探秘:掌握HTTP请求,开启你的数据抓取之旅
【4月更文挑战第19天】本文介绍了爬虫技术的基本概念和用途,阐述了HTTP协议的重要性。在Python中,借助requests库可轻松发送HTTP请求,如GET和POST。文章还展示了如何设置请求头、处理cookies和session。通过学习这些基础知识,读者将能够开始网络数据抓取,为进一步的数据分析奠定基础。后续文章将探讨HTML解析、动态内容处理及反爬虫策略。