之前採用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...