คุณต้องการใช้ ASP เพื่อสร้างโปรแกรมรวบรวมขโมยที่คุณชื่นชอบหรือไม่ หลังจากอ่านบทความต่อไปนี้ คุณสามารถสร้างมันขึ้นมาเองได้ หลักการ
โปรแกรมรวบรวมจะเรียกหน้าเว็บบนเว็บไซต์อื่นผ่านทางคอมโพเนนต์ XMLHTTP ใน XML ตัวอย่างเช่น โปรแกรมรวบรวมข่าวจำนวนมากเรียกหน้าเว็บข่าวของ Sina และ HTML บางส่วนในนั้นจะถูกแทนที่ และโฆษณาก็จะถูกกรองด้วย ข้อดีของการใช้โปรแกรมรวบรวมข้อมูลคือ ไม่จำเป็นต้องดูแลรักษาเว็บไซต์ เนื่องจากข้อมูลในโปรแกรมรวบรวมข้อมูลมาจากเว็บไซต์อื่น และจะมีการอัปเดตเมื่อมีการอัปเดตเว็บไซต์ โดยทั่วไปแล้ว จะสามารถประหยัดทรัพยากรเซิร์ฟเวอร์ได้ โปรแกรมรวบรวมมีไฟล์เพียงไม่กี่ไฟล์และเนื้อหาเว็บทั้งหมดมาจากเว็บไซต์อื่น ข้อเสียคือ: ความไม่เสถียร หากเว็บไซต์เป้าหมายผิดพลาด โปรแกรมก็จะผิดพลาดไปด้วย และหากเว็บไซต์เป้าหมายได้รับการอัพเกรดและดูแลรักษา โปรแกรมการรวบรวมก็จะต้องแก้ไขความเร็วตามไปด้วย เนื่องจากเป็นการโทรระยะไกล ความเร็วจะเร็วเท่ากับการอ่านข้อมูลบนเซิร์ฟเวอร์ภายในเครื่อง ซึ่งช้ากว่านั้นแน่นอน
1. คดีต่างๆ
ต่อไปนี้เป็นคำอธิบายโดยย่อเกี่ยวกับการประยุกต์ใช้ XMLHTTP ใน ASP
คัดลอกรหัสรหัสดังต่อไปนี้:
-
'ฟังก์ชั่นที่ใช้กันทั่วไป
'1. ป้อนที่อยู่หน้าเว็บเป้าหมาย URL และค่าที่ส่งคืน getHTTPPage คือโค้ด html ของหน้าเว็บเป้าหมาย
ฟังก์ชั่น getHTTPage(url)
สลัวHttp
ตั้งค่า Http=server.createobject(MSXML2.XMLHTTP)
Http.open GET, url, false
Http.ส่ง()
ถ้า Http.readystate<>4 แล้ว
ฟังก์ชั่นทางออก
สิ้นสุดถ้า
getHTTPPage=bytesToBstr(Http.responseBody,GB2312)
ตั้งค่า http=nothing
ถ้า err.number<>0 แล้ว err.Clear
ฟังก์ชั่นสิ้นสุด
'2. แปลง Ranma ใช้ xmlhttp โดยตรงเพื่อเรียกหน้าเว็บด้วยตัวอักษรจีน
ฟังก์ชั่น BytesToBstr (เนื้อหา)
objstream สลัว
ตั้ง objstream = Server.CreateObject (adodb.stream)
objstream.Type = 1
objstream.Mode =3
objstream.เปิด
objstream เขียนเนื้อหา
objstream ตำแหน่ง = 0
objstream.Type = 2
objstream.Charset = GB2312 'แปลงการเข้ารหัส UTF-8 เริ่มต้นเดิมเป็นการเข้ารหัส GB2312 มิฉะนั้น การใช้ส่วนประกอบ XMLHTTP โดยตรงเพื่อเรียกหน้าเว็บด้วยตัวอักษรจีนจะส่งผลให้รหัสที่อ่านไม่ออก
BytesToBstr = objstream.ReadText
objstream.ปิด
ตั้ง objstream = ไม่มีเลย
ฟังก์ชันสิ้นสุด
'ลองเรียกเนื้อหา html ของ http://www.vevb.com'
Dim Url,Html
URL=http://www.vevb.com;
Html = getHTTPage(Url)
การตอบกลับเขียน Html
-
2. ฟังก์ชั่นที่ใช้กันทั่วไปหลายอย่าง
(1) ฟังก์ชัน InStr
อธิบาย
ส่งกลับตำแหน่งที่อักขระบางตัว (string2) ปรากฏขึ้นเป็นครั้งแรกในสตริงอื่น (string1)
ไวยากรณ์
InStr(string1, string2)
ตัวอย่างเช่น:
Dim SearchString, SearchChar
SearchString =http://www.vevb.com ' สตริงที่จะค้นหา
SearchChar = jb51 'ค้นหา jb51.
MyBK = Instr(SearchString, SearchChar) ' กลับ 8
'ส่งคืน 0 หากไม่พบ เช่น:
SearchChar = BK
MyBK = Instr(SearchString, SearchChar) ' ส่งกลับ 0
(2) ฟังก์ชั่นกลาง
อธิบาย
ส่งกลับจำนวนอักขระที่ระบุจากสตริง
ไวยากรณ์
กลาง (สตริง เริ่มต้น เหนือ)
ตัวอย่างเช่น:
ดิม มายบีเค
MyBK = Mid (การออกแบบ BK (www.google) ของเรา, 7, 12) 'ตัดสตริงอักขระ 12 ตัวหลังอักขระตัวที่ 7 ของการออกแบบ BK (www.google) ของเรา
'ขณะนี้มูลค่าของ MyBK กลายเป็น www.google
(3) แทนที่ฟังก์ชัน
Dim SearchString, SearchChar
SearchString = BK Design ของเราเป็นสตริงของเว็บไซต์ทรัพยากรการสร้างเว็บไซต์ที่จะค้นหาภายใน
SearchString =แทนที่(SearchString,การออกแบบ BK,Www.google)
'ในเวลานี้ค่าของ SearchString กลายเป็น Www.google ของเราเป็นเว็บไซต์ทรัพยากรการสร้างเว็บไซต์
3. สกัดกั้นโค้ด HTML ของพื้นที่ที่ระบุ
ตัวอย่างเช่น ฉันเพียงต้องการได้รับส่วนข้อความระหว่าง <td> และ </td> ในโค้ด HTML ต่อไปนี้:
<html>
<title>(www.google)เครื่องมือค้นหาของ Google</title>
<ร่างกาย>
<ตาราง>
<tr><td></td></tr>
<tr><td id=Content>BK (www.google) เครื่องมือค้นหาของ Google เป็นเว็บไซต์ที่มีแหล่งข้อมูลมากมาย...</td></tr>
</ตาราง>
</ร่างกาย>
</html>
-
-
Dim StrBK,สตาร์ท,โอเวอร์,RsBK
StrBK=getHTTPPage (ที่อยู่ของหน้าเว็บ)
start=Instr(StrBK,<td id=Content>) 'ฟังก์ชันที่นี่คือการรับตำแหน่งของจุดเริ่มต้นของสตริง มีคนจะถามที่นี่: รหัสต้นฉบับคือ <td id=Content> ทำไมคุณถึงเรียก <td id=Content> ที่นี่ คำตอบ: ใน asp (เพื่อให้ชัดเจนมันจะแสดงด้วยเครื่องหมายคำพูดคู่สองตัวใน VBscript A double เครื่องหมายคำพูด เนื่องจากเครื่องหมายคำพูดคู่เป็นอักขระที่ละเอียดอ่อนสำหรับโปรแกรม)
over=Instr(StrBK,…</td></tr>)'ฟังก์ชันที่นี่คือการรับตำแหน่งของจุดสิ้นสุดของสตริง
'มีคนจะถามอีกครั้งที่นี่:( : ทำไมจึงมีจุดพิเศษสามจุดอยู่หน้าโค้ด HTML ที่โปรแกรมเรียก... คำตอบ: เคล็ดลับ: มี </td></tr> อยู่ด้านบนด้วย บรรทัด หากคุณใช้ </td></ tr> เพื่อค้นหา โปรแกรมจะเข้าใจผิดว่า </td></tr> ในบรรทัดด้านบนเป็นจุดสิ้นสุดของสตริงที่จะได้รับ
RsBK=mid(StrBK,start,over-start) 'ฟังก์ชั่นที่นี่คือการแยกสตริงระหว่างอักขระเริ่มต้นและอักขระตัวโอเวอร์ใน StrBK ฉันยังพูดถึงฟังก์ชันกลางในส่วนที่แล้ว การโอเวอร์สตาร์ทคือการคำนวณระยะห่างระหว่างตำแหน่งเริ่มต้นและตำแหน่งสิ้นสุดซึ่งเป็นจำนวนอักขระ
response.write(RsBK) 'ในที่สุดก็ส่งออกเนื้อหาที่ได้รับจากโปรแกรม
-
อย่าดีใจจนเกินไป เมื่อรันแล้ว จะพบว่ามีข้อผิดพลาดในโค้ด html ของเพจ เพราะเหตุใด? เนื่องจากโค้ด html ที่คุณได้รับคือ:
<td id=Content>BK (www.google) Google search engine เป็นเว็บไซต์ที่มีแหล่งข้อมูลมากมาย...
คุณเห็นสิ่งนั้นไหม? มีโค้ด HTML ไม่สมบูรณ์! จะทำอย่างไร? คำสั่ง start=Instr(StrBK,<td id=Content>) รับหมายเลขตำแหน่งของ <td id=Content> ใน StrBK ตอนนี้เราสามารถบวก 17 หลังคำสั่งโปรแกรม จากนั้นโปรแกรมจะชี้ไปที่ตำแหน่งอักขระที่อยู่หลัง <td id=เนื้อหา>.
โอเค โปรแกรมจะเปลี่ยนเป็นดังนี้:
-
-
Dim StrBK,สตาร์ท,โอเวอร์,RsBK
StrBK=getHTTPPage (ที่อยู่ของหน้าเว็บ)
start=Instr(StrBK,<td id=Content>) + 17
over=Instr(StrBK,…</td></tr>) 'ที่นี่คุณสามารถลบเจ็ด (-7) เพื่อลบ 3 คะแนนได้
RsBK=กลาง(StrBK,สตาร์ท,โอเวอร์สตาร์ท)
ตอบกลับเขียน(RsBK)
-
ไม่เป็นไร ขโมยของที่อยากได้มาโชว์ในเพจก็ได้ 555~
4. ลบหรือแก้ไขอักขระที่ได้รับ
แทนที่ BK(www.google) ใน RsBK ด้วย BK:
RsBK=แทนที่(RsBK,BK(www.google),BK)
หรือลบ (www.google) โดยตรง:
RsBK=แทนที่(RsBK,(www.google),)
เอาล่ะ ตอนนี้ RsBK กลายเป็น: BK Google search engine เป็นเว็บไซต์ที่มีทรัพยากรมากมาย...
แต่ในความเป็นจริงแล้ว ฟังก์ชั่นการแทนที่อาจไม่เหมาะกับบางสถานการณ์ ตัวอย่างเช่น เราต้องการลบการเชื่อมต่อทั้งหมดในสตริงบางประเภท และการแทนที่สามารถแทนที่ได้เฉพาะประเภทใดประเภทหนึ่งเท่านั้น มีฟังก์ชันแทนที่อื่นที่เกี่ยวข้องมาแทนที่หรือไม่
แต่คุณสามารถใช้นิพจน์ทั่วไปเพื่อทำงานนี้แทนได้ ฉันจะไม่ลงรายละเอียดที่นี่
(1) วิธีดำเนินการเปลี่ยนหน้าเว็บไซต์ของอีกฝ่ายให้เป็นของเราเอง?
คำตอบคือ: ใช้ฟังก์ชันแทนที่และส่งผ่านพารามิเตอร์ของหน้า
ตัวอย่างเช่น หน้าของอีกฝ่ายมีโค้ดเปลี่ยนหน้าดังนี้: <a href=2.htm>หน้าถัดไป</a> เราสามารถใช้เนื้อหาที่กล่าวถึงข้างต้นเพื่อรับสตริงนี้ จากนั้นใช้ฟังก์ชันแทนที่: RsBK= แทนที่( RsBK,<a href=,<a href=page.asp?Url=)
จากนั้นรับค่าพารามิเตอร์ของ Url ในโปรแกรม page.asp และสุดท้ายใช้เทคโนโลยีการรวบรวมเพื่อรับเนื้อหาที่ต้องการในหน้าถัดไป
(2) วิธีจัดเก็บเนื้อหาที่ได้รับลงในฐานข้อมูล
เนื่องจากพื้นที่มีจำกัด ผมจะขอกล่าวถึงที่นี่สั้นๆ
จริงๆแล้วมันง่ายมาก:
ประมวลผลเนื้อหาที่ถูกขโมยเพื่อป้องกันข้อผิดพลาดในการแทรก SQL เมื่อเขียนไปยังฐานข้อมูล เช่น: แทนที่(สตริง,','')
จากนั้นรันคำสั่ง sql เพื่อแทรกลงในฐานข้อมูลและมันก็โอเค~
ข้างต้นเป็นเพียงแอปพลิเคชันพื้นฐานบางส่วนของคอมโพเนนต์ XMLHTTP ที่จริงแล้ว คอมโพเนนต์นี้ยังสามารถใช้ฟังก์ชันต่างๆ มากมาย เช่น การบันทึกอิมเมจระยะไกลไปยังเซิร์ฟเวอร์ภายในเครื่อง และการใช้คอมโพเนนต์ adodb.stream เพื่อบันทึกข้อมูลที่ได้มาลงในฐานข้อมูล คอลเลกชันมีฟังก์ชันและการใช้งานที่หลากหลาย