網頁內容抓取

2021-06-19 08:32:43 字數 1669 閱讀 9741

之前採用xpath和正規表示式對網頁內容進行抓取,發現在有的地方不如人意,就採用了htmlparser對頁面進行解析,抓取需要的東西。htmlparser有點不好的地方在於不能對starttag和endtag進行匹配。採用了兩種方法進行抓取。

第一種,抓取成對的tag之間的內容,採用了queue.queue儲存handle_data。**如下:

queue_data = queue.queue(0)

def fetchdata(tag):

while not queue_data.empty():

data = queue_data.get()

print(data, end = '')

print(end = '\n')

class myhtmlparser(htmlparser):

##    def handle_entityref(self, ref):

##        if ref == 'nbsp':

##            print('the name is ', ref)

def handle_starttag(self, tag, attrs):

if tag =='li':

queue_data.put(tag)

def handle_endtag(self, tag):

if tag == 'li':

fetchdata(tag)

def handle_data(self, data):

if not queue_data.empty():

queue_data.put(data)

第二種,抓取所有成對tag之間的內容,採用queue.lifiqueue儲存data和starttag,當有endtag時,判斷是否與之匹配的starttag,若有取出starttag和data。原本想list.pop()判斷是否存在匹配的starttag,後來發現有starttag不一定有endtag。**如下:

queue_data = queue.lifoqueue(0)

list_tag =

def findtag(list, tag):

if list.count(tag):

data = list.pop()

while data != tag:

data = list.pop()

return(true)

else:

return(false)   

def fetchdata(tag):

data = queue_data.get()

if data == tag:

return

else:

print("encountered a tag:", tag)

while data != tag:

print(data, end = '')

data = queue_data.get()

print(end = '\n')

def handle_data(self, data):

queue_data.put(data)

在starttag裡,可以採用以下**抓取tag的屬性

##            for i,value in attrs:

##                print(value)

c 抓取網頁內容

新增的引用 using system.net using system.io using system.io.compression 1.webclient mywebclient new webclient mywebclient.credentials credentialcache.defau...

python 網頁內容抓取

使用模組 import urllib2 import urllib 普通抓取例項 usr bin python coding utf 8 import urllib2 url 建立request物件 request urllib2.request url 傳送請求,獲取結果 try response...

C 抓取網頁內容

1 抓取一般內容 需要三個類 webrequest webresponse streamreader 所需命名空間 system.net system.io 核心 webrequest request webrequest.create webresponse response request.ge...