作者rock1985 (疾风)
看板Python
标题Re: [问题] 用python抓网页资料(抓link)
时间Tue Feb 8 01:00:19 2011
我现在有一些问题
我找了网路上的东西稍微改一点点
import urllib.request, urllib.parse, urllib.error
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print("Encountered a {} start tag".format(tag))
def handle_data(self, data):
print("Attrs is {}".format(data))
def handle_endtag(self, tag):
print("Encountered a {} end tag".format(tag))
p = MyHTMLParser()
page = """<html><h1>Title</h1><p>I'm a paragraph!</p></html>"""
p.feed(page)
p.close()
我现在是可以印出一些东西
有功能可以只印出我想要的东西,例如 其他的html 连结
或是不光只是印出还可以将连结存起来 方便之後还要去抓网页资料
我另外一个版本的程式在执行的时候会有问题
import urllib.request, urllib.parse, urllib.error
#import html.parser
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print("Encountered a {} start tag".format(tag))
def handle_data(self, data):
print("Attrs is {}".format(data))
def handle_endtag(self, tag):
print("Encountered a {} end tag".format(tag))
p = MyHTMLParser()
sock = urllib.request.urlopen("
http://www.google.com/")
p.feed(sock.read())
sock.close()
p.close()
Traceback (most recent call last):
File "D:\workspace\Test\src\main.py", line 17, in <module>
p.feed(sock.read())
File "C:\Python31\lib\html\parser.py", line 107, in feed
self.rawdata = self.rawdata + data
TypeError: Can't convert 'bytes' object to str implicitly
是哪里出问题了呢??
还有一个不太了解的地方
HTMLParser.feed(data)¶ 这边看起来只要一个值
但是我有遇过执行的时候跟说我少一个参数
所以是HTMLParser.feed(slef, data) 才对吗??
谢谢大家
--
我不是宅 我只是比较居家
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 108.6.70.125
-------------------------------------
我查了一点资料 好像是因为喂进去的资料要先经过转换
#!/usr/bin/python
# -*- coding: utf-8 -*-
from html.parser import HTMLParser
import urllib.request, urllib.parse, urllib.error
import sys
#定义HTML解析器
class LinkPrinter(HTMLParser):
def handle_starttag(self,tag,attrs):
if tag == 'a':
for name,value in attrs:
if name == 'href': print(value)
#创建HTML解析器的实例
lParser = LinkPrinter()
#打开HTML文件
data = urllib.request.urlopen("
http://google.com.tw").read()
lParser.feed(data.decode('UTF-8'))
lParser.close()
现在遇到一个问题是
Traceback (most recent call last):
File "D:\workspace\WebHW1\src\main.py", line 19, in <module>
lParser.feed(data.decode('UTF-8'))
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa9 in position 3632:
invalid start byte
但是google的首页是用utf-8编码
为什麽会不能转换呢?
谢谢大家
※ 编辑: rock1985 来自: 128.238.241.105 (02/08 05:25)
1F:→ rock1985:结果我换成 google.com 就OK了 越来越混乱 = =a 02/08 05:29