python 乙個簡單的貪婪爬蟲

2022-05-18 01:08:21 字數 2588 閱讀 1860

這個爬蟲的作用是,對於乙個給定的url,查詢頁面裡面所有的url連線並依次貪婪爬取

主要需要注意的地方:

1.lxml.html.iterlinks()  可以實現對頁面所有url的查詢

2.獲取頁面要設定超時,否則遇到沒有響應的頁面,**容易卡死

3.對所有異常的捕獲

4.廣度優先搜尋實現

具體**如下:

#

!/usr/bin/env python

#encoding:utf8

#這是乙個爬蟲**,從初始url頁面中查詢所有的url並根據廣度優先的順序依次貪婪爬取

#爬取的頁面以1.html,2.html...的方式命名

#author:匡子語

import

reimport

time

import

lxml.html

import

urllib2

from collections import

deque

class

scrawurl:

def__init__

(self):

self.total = 50000 #

要獲取的頁面數

self.urls = ["

"] #

初始url

self.html_num = 13047 #

當前儲存的是第幾個頁面

self.url_num = 0 #

當前要爬取的url在urls中的位置

defgethtml(self, url):

print

"url:%s

" %url

user_agent = '

mozilla/4.0 (compatible; msie 5.5; windows nt)

'headers =

try:

request = urllib2.request(url, headers =headers)

response = urllib2.urlopen(request, timeout=5) #

要設定timeout,有時頁面長時間無法響應不加timeout會導致程式卡死

對於所有異常形式,都返回空內容

return

''def

geturl(self, content):

try:

print

"geturl

"html =lxml.html.fromstring(content)

links = lxml.html.iterlinks(html) #

這個函式可以自動獲取頁面中的所有url,非常好用

廣度優先爬取

print

"scrawl

"while len(self.urls) < self.total and len(self.urls) > self.url_num: #

獲取足夠的url

url =self.urls[self.url_num]

self.url_num += 1content =self.gethtml(url)

ifcontent:

urls =self.geturl(content)

ifurls:

for url in

urls:

if url not

in self.urls: #

對於已經爬取過的url跳過

while self.html_num < self.total and len(self.urls) > 0: #

獲取足夠的頁面

url =self.urls[self.url_num]

self.url_num += 1self.gethtml(url)

if__name__ == "

__main__":

surl =scrawurl()

surl.scrawl()

python 乙個簡單的貪婪爬蟲

這個爬蟲的作用是,對於乙個給定的url,查詢頁面裡面所有的url連線並依次貪婪爬取 主要需要注意的地方 1.lxml.html.iterlinks 可以實現對頁面所有url的查詢 2.獲取頁面要設定超時,否則遇到沒有響應的頁面,容易卡死 3.對所有異常的捕獲 4.廣度優先搜尋實現 具體 如下 usr...

乙個簡單的Python爬蟲

乙個簡單測試爬蟲的網頁 1.獲取 的html import urllib.request request urllib.request.urlopen str request.read print str 2.返回網頁標題 輸出目標網頁內title標籤內的文字 gettitle 函式返回網頁的標題,...

Python爬蟲入門筆記 乙個簡單的爬蟲架構

上次我們從對爬蟲進行簡單的介紹,今天我們引入乙個簡單爬蟲的技術架構,解釋爬蟲技術架構中的幾個模組,對爬蟲先有乙個整體的認知,方便對爬蟲的理解和後面的程式設計。1 url管理器 防止重複抓取 防止迴圈抓取 url是爬蟲爬取的入口和橋梁,除了入口url外,剩下的url我們需要在網頁上獲取並統一管理,防止...