ฉันได้พัฒนาโปรแกรมคอลเลกชันหลายโปรแกรมและศึกษารหัสโปรแกรมคอลเลกชันจำนวนมาก ดังนั้นฉันจึงมีความเข้าใจเพียงเล็กน้อยเกี่ยวกับหลักการของโปรแกรมคอลเลกชัน เรามาพูดถึงหลักการรวบรวมกันก่อน:
ขั้นตอนหลักของขั้นตอนการเก็บรวบรวมมีดังนี้:
1. รับเนื้อหาของหน้าที่รวบรวม
2. แยกข้อมูลทั้งหมดที่ใช้จากรหัสการเข้าซื้อกิจการ
1. รับเนื้อหาของหน้าที่รวบรวม
วิธี ASP ที่ใช้กันทั่วไปที่ฉันรู้จักในปัจจุบันเพื่อรับเนื้อหาของหน้าที่รวบรวมคือ:
1. ใช้ส่วนประกอบ serverXMLHTTP เพื่อรับข้อมูล
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่น GetBody (weburl)
'สร้างวัตถุ
Dim ObjXMLHTTP
ตั้งค่า ObjXMLHTTP=Server.CreateObject(MSXML2.serverXMLHTTP)
'ขอไฟล์ในรูปแบบอะซิงโครนัส
ObjXMLHTTP เปิด GET, weburl, False
ObjXMLHTTP.send
ในขณะที่ ObjXMLHTTP.readyState <> 4
ObjXMLHTTP.waitForResponse 1,000
เวนด์
'รับผล.
GetBody=ObjXMLHTTP.responseBody
'ปล่อยวัตถุ.
ตั้งค่า ObjXMLHTTP=ไม่มีอะไร
ฟังก์ชันสิ้นสุด
วิธีการโทร:
GetBody(ที่อยู่ URLf ของไฟล์)
2. หรือส่วนประกอบ XMLHTTP เพื่อรับข้อมูล
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่น GetBody (weburl)
'สร้างวัตถุ
ตั้งค่าการดึงข้อมูล = CreateObject(Microsoft.XMLHTTP)
ด้วยการเรียกค้น
.เปิดรับ, weburl, เท็จ, ,
.ส่ง
GetBody = .การตอบสนองร่างกาย
จบด้วย
'ปล่อยวัตถุ.
ตั้งค่าการดึงข้อมูล = ไม่มีเลย
ฟังก์ชันสิ้นสุด
วิธีการโทร:
GetBody(ที่อยู่ URLf ของไฟล์)
เนื้อหาข้อมูลที่ได้รับในลักษณะนี้ยังคงต้องมีการเข้ารหัสและแปลงก่อนจึงจะสามารถใช้งานได้
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่น BytesToBstr (เนื้อหา, Cset)
objstream สลัว
ตั้ง objstream = Server.CreateObject (adodb.stream)
objstream.Type = 1
objstream.Mode =3
objstream.เปิด
objstream เขียนเนื้อหา
objstream ตำแหน่ง = 0
objstream.Type = 2
objstream.Charset = Cset
BytesToBstr = objstream.ReadText
objstream.ปิด
ตั้ง objstream = ไม่มีเลย
ฟังก์ชันสิ้นสุด
วิธีการโทร: การเข้ารหัส BytesToBstr (ข้อมูลที่จะแปลง, การเข้ารหัส) มักใช้เป็น GB2312 และ UTF-8
2. แยกข้อมูลทั้งหมดที่ใช้จากรหัสการเข้าซื้อกิจการ
วิธีที่ฉันมีในปัจจุบันคือ:
1. ใช้ฟังก์ชัน MID ในตัวของ ASP เพื่อดักจับข้อมูลที่ต้องการ
คัดลอกรหัสรหัสดังต่อไปนี้:
เนื้อหาของฟังก์ชัน (wstr, เริ่มต้น, เหนือ)
เริ่มต้น=Newstring(wstrเริ่มต้น)
'ตั้งค่าแท็กเริ่มต้นที่ไม่ซ้ำกันของข้อมูลที่ต้องประมวลผล
เกิน = Newstring (wstr กว่า)
'การตอบสนองต่อการเริ่มต้นเป็นเพียงแท็กปิดท้ายของข้อมูลที่จำเป็นต้องได้รับการประมวลผล
body=mid(wstr,สตาร์ท,โอเวอร์สตาร์ท)
'กำหนดช่วงของหน้าที่แสดง
ฟังก์ชันสิ้นสุด
วิธีการเรียก: body (เนื้อหาของหน้าที่รวบรวม, แท็กเริ่มต้น, แท็กปิด)
2. ใช้นิพจน์ทั่วไปเพื่อรับข้อมูลที่จำเป็น
คัดลอกรหัสรหัสดังต่อไปนี้:
เนื้อหาของฟังก์ชัน (wstr, เริ่มต้น, เหนือ)
Set xiaoqi = วัตถุการกำหนดค่า Regexp'set ใหม่
xiaoqi.IgnoreCase = True'ไม่สนใจตัวพิมพ์
xiaoqi.Global = True' ตั้งค่าเป็นการค้นหาข้อความแบบเต็ม
xiaoqi.Pattern = &start&.+?&over&'การแสดงออกปกติ
Set Matches =xiaoqi.Execute(wstr)'เริ่มดำเนินการกำหนดค่า
ตั้ง xiaoqi = ไม่มีอะไร
ร่างกาย=
สำหรับการแข่งขันแต่ละครั้งในการแข่งขัน
body=body&Match.Value 'การจับคู่แบบวนซ้ำ
ต่อไป
ฟังก์ชันสิ้นสุด
วิธีการเรียก: body (เนื้อหาของหน้าที่รวบรวม, แท็กเริ่มต้น, แท็กปิด)
แนวคิดโดยละเอียดสำหรับขั้นตอนการเก็บรวบรวม:
1. รับที่อยู่ของแต่ละหน้าของหน้ารายการแบ่งหน้าของเว็บไซต์
ปัจจุบัน เว็บไซต์ไดนามิกส่วนใหญ่มีกฎสำหรับที่อยู่เพจ เช่น:
หน้าไดนามิก
หน้าแรก: index.asp?page=1
หน้าที่สอง: index.asp?page=2
หน้าที่สาม: index.asp?page=3
-
หน้าคงที่
หน้าแรก: page_1.htm
หน้าสอง: page_2.htm
หน้าที่สาม: page_3.htm
-
ในการรับที่อยู่ของแต่ละหน้าของหน้ารายการเพจของเว็บไซต์ คุณเพียงแค่ต้องใช้ตัวแปรเพื่อแทนที่อักขระที่เปลี่ยนแปลงของที่อยู่เพจแต่ละหน้า เช่น: page_<%=&page&%>.htm
2. รับเนื้อหาของหน้ารายการแบบแบ่งหน้าของเว็บไซต์ที่รวบรวม
3. แยกที่อยู่การเชื่อมต่อ URL ของหน้าเนื้อหาที่รวบรวมจากรหัสรายการเพจ
ลิงค์หน้าเนื้อหาส่วนใหญ่ในหน้าเพจที่มีการแบ่งหน้าก็มีกฎตายตัวเช่นกัน เช่น:
<a href=url1>การเชื่อมต่อ 1</a> <br>
<a href=url2>การเชื่อมต่อ 2</a> <br>
<a href=url3>การเชื่อมต่อ 3</a> <br>
ใช้รหัสต่อไปนี้เพื่อรับคอลเลกชันของการเชื่อมต่อ URL
คัดลอกรหัสรหัสดังต่อไปนี้:
ตั้ง xiaoqi = Regexp ใหม่
xiaoqi.IgnoreCase = จริง
xiaoqi.Global = จริง
xiaoqi.รูปแบบ = .+?
Set Matches = xiaoqi.Execute (เนื้อหารายการหน้า)
ตั้ง xiaoqi = ไม่มีอะไร
URL=
สำหรับการแข่งขันแต่ละครั้งในการแข่งขัน
url=url&Match.Value
ต่อไป
4. รับเนื้อหาของหน้าเนื้อหาที่รวบรวม และดักข้อมูลที่จะได้รับจากหน้าเนื้อหาที่รวบรวมตามเครื่องหมายแยก
เนื่องจากเป็นเพจที่สร้างขึ้นแบบไดนามิก หน้าเนื้อหาส่วนใหญ่จึงมีแท็ก HTML เหมือนกัน เราสามารถแยกส่วนที่จำเป็นของเนื้อหาตามแท็กปกติเหล่านี้
ชอบ:
แต่ละหน้ามีชื่อหน้าเว็บ <title>ชื่อหน้าเว็บ</title> คุณสามารถใช้ฟังก์ชันสกัดกั้น MID ที่ฉันเขียนไว้ด้านบนเพื่อรับค่าระหว่าง <title></title> หรือคุณสามารถใช้นิพจน์ทั่วไปเพื่อรับค่าดังกล่าวได้
ตัวอย่าง: body(<title>ชื่อหน้าเว็บ</title>,<title>,</title>)