Re: [問題] 用python抓網頁資料(抓link)
我現在有一些問題
我找了網路上的東西稍微改一點點
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
02/08 05:29, 1F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章