用LoadRunner做一個網路爬蟲
Kim在《LoadRunner as a WebCrawler》這篇文章中介紹瞭如何用LoadRunner實現一個簡單的網路爬蟲:
http://ptfrontline.wordpress.com/2008/04/07/loadrunner-as-a-webcrawler/
網路爬蟲在效能測試中可以用在給“快取暖身”上。
void Process_Level1()
{
int i;
char buf[2048];
char buf2[2048];
char *pos;
int res;
int count;
count = atoi(lr_eval_string("{URL_LIST1_count}"));
if (count > 0)
for ( i=1; i 0) res++;
if (res == 0)
{
lr_save_string( lr_eval_string(buf), "URL" );
// Replace & with & - NONSTANDARD FUNCTION
lr_replace( "URL", "&", "&" );
web_reg_save_param("URL_LIST2", // save all href="" URL's
"LB=href="",
"RB="",
"Ord=All",
"Search=Body",
"NotFound=Warning",
LAST );
web_url("URL",
"URL={BaseURL}{URL}",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Mode=HTML",
LAST);
// Process all "URL_LIST2" entires
Process_Level2();
}
}
}
Vince Lozada把這個指令碼完善了一下(用遞迴的方式訪問每一個URL一次):
char **myList;
int numListElements = 0;
int listSize = 1;
Action()
{
web_reg_save_param("URL_LIST1",
"LB=href=/"",
"RB=/"",
"Ord=All",
"Search=Body",
"NotFound=Warning",
LAST );
web_url("Home Page",
"URL={BaseURL}",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
Process_URLs(1);
free(myList);
myList = 0;
numListElements = 0;
listSize = 1;
return 0;
}
Process_URLs(int index)
{
int i;
int nextIndex;
char listName[255];
char listCountParamName[255];
char listItemParamName[255];
int count;
int res_count;
char *resourceName;
nextIndex = (index + 1);
sprintf(listCountParamName, "{URL_LIST%d_count}", index);
count = atoi(lr_eval_string(listCountParamName));
if (count > 0){
for (i = 1; i <= count; i++){
sprintf(listItemParamName, "{URL_LIST%d_%d}", index, i);
lr_save_string(lr_eval_string(listItemParamName), "URL");
if (isItemInList(lr_eval_string("{URL}")) == 0) {
char *str = (char *)malloc(sizeof(lr_eval_string("{URL}")));
str = lr_eval_string("{URL}");
addItemToList(str);
sprintf(listName, "URL_LIST%d", nextIndex);
web_reg_save_param(listName,
"LB=href=/"",
"RB=/"",
"Ord=All",
"Search=Body",
"NotFound=Warning",
LAST );
resourceName = (char *) strrchr(lr_eval_string("{URL}"), ‘/’);
web_url(resourceName,
"URL={BaseURL}{URL}",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Mode=HTML",
LAST);
Process_URLs(nextIndex);
}
}
}
}
void addItemToList(char *item) {
char **newList;
int i;
if (!myList) {
myList = (char **) malloc(listSize * sizeof(char *));
}
if (++numListElements > listSize) {
newList = (char**) malloc(listSize * 2 * sizeof(char *));
for (i = 0; i < listSize; ++i) {
newList[i] = myList[i];
}
listSize *= 2;
free(myList);
myList = newList;
}
myList[numListElements - 1] = item;
}
int isItemInList(char *item) {
int i;
for (i = 0; i < numListElements; ++i) {
if (!strcmp(item, myList[i])) {
return 1;
}
}
return 0;
}
void printList() {
int i;
for (i = 0; i < numListElements; ++i) {
lr_output_message(myList[i]);
}
}
試了一下這個指令碼,發現還不夠完善,在處理連結的URL字串時還要考慮得更周全。
相關文章
- 《用Python寫網路爬蟲》--編寫第一個網路爬蟲Python爬蟲
- 精通Scrapy網路爬蟲【一】第一個爬蟲專案爬蟲
- 網路爬蟲——爬蟲實戰(一)爬蟲
- 爬蟲學習之一個簡單的網路爬蟲爬蟲
- 如何自己寫一個網路爬蟲爬蟲
- python網路爬蟲應用_python網路爬蟲應用實戰Python爬蟲
- 使用Scrapy構建一個網路爬蟲爬蟲
- 網路爬蟲爬蟲
- python網路爬蟲_Python爬蟲:30個小時搞定Python網路爬蟲視訊教程Python爬蟲
- nodeJS做一個簡單的爬蟲NodeJS爬蟲
- scraping_編寫第一個網路爬蟲API爬蟲
- 網路爬蟲技術及應用爬蟲
- 網路爬蟲精要爬蟲
- 網路爬蟲示例爬蟲
- 用PYTHON爬蟲簡單爬取網路小說Python爬蟲
- 網路爬蟲:使用Scrapy框架編寫一個抓取書籍資訊的爬蟲服務爬蟲框架
- 什麼是網路爬蟲?為什麼用Python寫爬蟲?爬蟲Python
- python網路爬蟲筆記(一)Python爬蟲筆記
- 網路爬蟲的原理爬蟲
- 網路爬蟲專案爬蟲
- 傻傻的網路爬蟲爬蟲
- 初探python之做一個簡單小爬蟲Python爬蟲
- [Python] 網路爬蟲與資訊提取(1) 網路爬蟲之規則Python爬蟲
- python3網路爬蟲開發實戰_Python 3開發網路爬蟲(一)Python爬蟲
- 用python語言編寫網路爬蟲Python爬蟲
- golang解析網頁,可以做爬蟲了Golang網頁爬蟲
- 什麼是Python網路爬蟲?常見的網路爬蟲有哪些?Python爬蟲
- scraping_編寫第一個網路爬蟲_最終版本API爬蟲
- python網路爬蟲(14)使用Scrapy搭建爬蟲框架Python爬蟲框架
- 爬蟲學習之基於Scrapy的網路爬蟲爬蟲
- python DHT網路爬蟲Python爬蟲
- 網路爬蟲的反扒策略爬蟲
- 什麼是網路爬蟲爬蟲
- 什麼是網路爬蟲?爬蟲
- 網路爬蟲是什麼?爬蟲
- 網路爬蟲如何運作?爬蟲
- 網路爬蟲流程總結爬蟲
- 網路爬蟲大型教程(二)爬蟲