Re: [問題] 用python抓網頁資料(抓link)

看板Python作者 (疾風)時間14年前 (2011/02/08 01:00), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/2 (看更多)
我現在有一些問題 我找了網路上的東西稍微改一點點 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)

02/08 05:29, , 1F
結果我換成 google.com 就OK了 越來越混亂 = =a
02/08 05:29, 1F
文章代碼(AID): #1DK2Kdqn (Python)
文章代碼(AID): #1DK2Kdqn (Python)