delphi : 取得网页源码内容
取得网页的源码内容的函数以及调用方法供大家参考:
program geturl;
uses
wininet,
windows;
//取网页内容
function StrPas(const Str: PChar): string;
begin
Result := Str;
end;
function GetWebPage(const Url: string):string;
var
Session,
HttpFile:HINTERNET;
szSizeBuffer:Pointer;
dwLengthSizeBuffer:DWord;
dwReserved:DWord;
dwFileSize:DWord;
dwBytesRead:DWord;
Contents:PChar;
begin
Session:=InternetOpen('',0,niL,niL,0);
HttpFile:=InternetOpenUrl(Session,PChar(Url),niL,0,0,0);
dwLengthSizeBuffer:=1024;
HttpQueryInfo(HttpFile,5,szSizeBuffer,dwLengthSizeBuffer,dwReserved);
GetMem(Contents,dwFileSize);
InternetReadFile(HttpFile,Contents,dwFileSize,dwBytesRead);
InternetCloseHandle(HttpFile);
InternetCloseHandle(Session);
Result:=StrPas(Contents);
FreeMem(Contents);
end;
调用方法 GetWebPage(网页地址);
Delphi取得网页源码内容的另一种办法
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Sockets; type
TForm1 = class(TForm)
Button1: TButton;
TcpClient1: TTcpClient;
Memo1: TMemo;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);
var
Test: string;
HttpLen: integer;
begin
TcpClient1.RemoteHost := 'www.163.cn';
TcpClient1.RemotePort := '80';
TcpClient1.Active := true;
if TcpClient1.Connected then
begin
//发送HTTP1.1指令
TcpClient1.Sendln('GET / HTTP/1.1');
TcpClient1.Sendln('Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*');
TcpClient1.Sendln('User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon)');
TcpClient1.Sendln('Host: www.163.cn');
TcpClient1.Sendln('Connection: Keep-Alive');
TcpClient1.Sendln('');
end;
HttpLen := 0;
//循环读取所有返回的数据头信息
while true do
begin
Test := TcpClient1.Receiveln();
Memo1.Lines.Add(Test);
if Test = '' then Break;
if Pos('Content-Length: ', Test) > 0 then
begin
Delete(Test, 1, 16);
HttpLen := StrToInt(Test); //获取将要读取的数据长度
end;
end;
LockWindowUpdate(Memo1.Handle);
Memo1.Clear;
//循环读取所有返回的数据直接数据接收完毕
while (Length(Memo1.Text) < HttpLen - 2) or (TcpClient1.WaitForData(0) and (HttpLen = 0)) do
begin
Memo1.Lines.Add(TcpClient1.Receiveln(#$0D#$0A));
Application.ProcessMessages;
Edit1.Text := Format('总长度:%d 已下载:%d ', [HttpLen, Length(Memo1.Text)]);
end; //有些网页返回的非ANSI字符串,则需要转码,否则中文全是乱码
if Length(Memo1.Text) = HttpLen - 2 then Memo1.Text := Utf8ToAnsi(Memo1.Text); LockWindowUpdate(0);
Memo1.Lines.SaveToFile('d:\test.txt');
ShowMessage('完成数据下载');
end; end.
delphi : 取得网页源码内容的更多相关文章
- C#快速获取指定网页源码的几种方式,并通过字符串截取函数 或 正则 取指定内容(IP)
//只获取网页源码开始到标题位目的进行测试 //第一种方式经过测试,稍微快点 string url = "http://www.ip.cn"; HttpWebRequest req ...
- C语言之socket获取网页源码
写爬虫也许你用的是python,类似urlopen(url).read()即可获得普通的网页的源码,或者用的java的网络库加上流操作,或者其他高级语言.但你有没有想过使用C语言来实现呢?我曾经以为用 ...
- 在view source页面保存下来的网页源码和保存网页得到的源码不同
前言 以前抓网页都是直接requests+bs4直接刚的,今天想拿一下拉钩的数据,就继续按照以下步骤来了: 先找个想爬的网页,然后写解析功能 批量爬,然后解析 入库 探究 结果发现行不通了,用bs4去 ...
- Jsoup解析网页源码时常用的Element(s)类
Jsoup解析网页源码时常用的Element(s)类 一.简介 该类是Node的直接子类,同样实现了可克隆接口.类声明:public class Element extends Node 它表示由一个 ...
- Python3 Selenium WebDriver网页的前进、后退、刷新、最大化、获取窗口位置、设置窗口大小、获取页面title、获取网页源码、获取Url等基本操作
Python3 Selenium WebDriver网页的前进.后退.刷新.最大化.获取窗口位置.设置窗口大小.获取页面title.获取网页源码.获取Url等基本操作 通过selenium webdr ...
- Delphi 对话框实现源码分析
Delphi 对话框实现源码分析 简介 在这篇文章中,我将大概的从Delphi XE2 的Dialogs单元入手,分析ShowMessage,MessageBox等对话框运行原理,希望能帮助你理解 ...
- Selenium WebDriver-网页的前进、后退、刷新、最大化、获取窗口位置、设置窗口大小、获取页面title、获取网页源码、获取Url等基本操作
通过selenium webdriver操作网页前进.后退.刷新.最大化.获取窗口位置.设置窗口大小.获取页面title.获取网页源码.获取Url等基本操作 from selenium import ...
- [Xcode 实际操作]八、网络与多线程-(9)使用异步Get方式获取网页源码
目录:[Swift]Xcode实际操作 本文将演示如何通过Get请求方式,异步获取网页源码. 异步请求与同步请求相比,不会阻塞程序的主线程,而会建立一个新的线程. 在项目导航区,打开视图控制器的代码文 ...
- html 网页源码解析:bs4中BeautifulSoup
from bs4 import BeautifulSoup result=requests.request("get","http://www.baidu.com&quo ...
随机推荐
- POJ2253 Frogger(最短路)
题目链接. 题意: 从0号点,到1号点,找一条能通过的路,使得这条路中的最大的边,比其它所有可能的路中的边都小. 分析: 这题就是按着dijkstra写,写着写着觉得像是prim了. 其中d[n]表示 ...
- BZOJ 1015 [JSOI2008]星球大战starwar
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 3551 Solved: 1581[Submit ...
- yui datatable动态修改行号
相关函数 getRecord :YAHOO.widget.Record getRecord ( row ) For the given identifier, returns the associa ...
- android 解析文章,通过JSON格式请求传递 的好文章,这里记录一下
http://blog.sina.com.cn/s/blog_8d955f8c0100xv7i.html http://blog.163.com/zhangzheming_282/blog/stati ...
- 尚学堂 JAVA DAY11 概念总结
1.冒泡排序算法 <升序排列> 思路1: 数组长度为n,那么要对数组进行n-1次遍历; step 1---从数组的第一个数开始,两两比较,如果第一个数 > 第二个数,将二者进行交换: ...
- windows2012R2虚拟机快速激活的方法
相信Hyper-v管理员都有这样的经历,安装多台虚拟机后,都要一台一台手工激活,如果虚拟机足够多的话,这是一项很繁琐的工作,但从Windows Server 2012 R2开始,就不需要这么做了,微软 ...
- pip使用国内镜像/源的方法
一.修改配置文件 pip配置文件的路径如下,没有的话新建一个: linux/msys2等是:用户目录/.pip/pip.confwindows是:用户目录/pip/pip.ini 用户目录通过下行命令 ...
- (转)Maven实战(五)坐标详解
1.为什么要定义Maven坐标 在我们开发Maven项目的时候,需要为其定义适当的坐标,这是Maven强制要求的.在这个基础上,其他Maven项目才能应用该项目生成的构件. 2.Maven坐 ...
- Android Spinner列表选择框
Spinner Spinner是一个下拉列表,通常用于选择一系列可选择的列表项,它可以使用适配器,也可以直接设置数组源. 1.直接设置数组源 在res/values/strings.xml中设置数组源 ...
- HDU 2853 Assignment(KM最大匹配好题)
HDU 2853 Assignment 题目链接 题意:如今有N个部队和M个任务(M>=N),每一个部队完毕每一个任务有一点的效率,效率越高越好.可是部队已经安排了一定的计划,这时须要我们尽量用 ...