HTML 解析器导入问题
HTML parser import issues
所以我尝试在 python 中使用 HTMLParser 和 urllib3 在 python 中制作网络爬虫。目前我有两个不同的导入问题,第一个是
import html.parser
import urllib
urlText = []
#Define HTML Parser
class parseText(HTMLParser.HTMLParser):
def handle_data(self, data):
if data != '\n':
urlText.append(data)
#Create instance of HTML parser
lParser = parseText()
thisurl = "http://www-rohan.sdsu.edu/~gawron/index.html"
#Feed HTML file into parser
lParser.feed(urllib.urlopen(thisurl).read())
lParser.close()
for item in urlText:
print (item)
使用此代码 returns visual studio 错误框中的错误
name 'HTMLParser' is not defined
第二个选项完全相同,但使用 import HTMLParser 而不是 html.parser
import HTMLParser
import urllib
urlText = []
#Define HTML Parser
class parseText(HTMLParser.HTMLParser):
def handle_data(self, data):
if data != '\n':
urlText.append(data)
#Create instance of HTML parser
lParser = parseText()
thisurl = "http://www-rohan.sdsu.edu/~gawron/index.html"
#Feed HTML file into parser
lParser.feed(urllib.urlopen(thisurl).read())
lParser.close()
for item in urlText:
print (item)
哪个returns错误
No module named 'markupbase'
我对这些包裹失去了理智。有没有人知道修复或看到问题。
Ps。我是 运行 这个 Visual studio 2016 年 Python 3.5
我也在按照您正在学习的相同教程学习网络爬虫。我昨天 运行 该代码时也遇到了这些问题。经过几次 google 搜索后,我解决了这些问题。我是 python 和网络爬虫的新手,如果我说错了请纠正我。
如果您使用的是 python 3.5,则应导入 HTMLParser from html.parser
和 urllib.request
。
在第 7 行,您必须继承 HTMLParser 而不是 HTMLParser.HTMLParser。
此时你的代码应该是这样的
from html.parser import HTMLParser
import urllib.request
urlText = []
#Define HTML Parser
class parseText(HTMLParser):
def handle_data(self, data):
if data != '\n':
urlText.append(data)
#Create instance of HTML parser
lParser = parseText()
thisurl = "http://www-rohan.sdsu.edu/~gawron/index.html"
#Feed HTML file into parsers
lParser.feed(urllib.request.urlopen(thisurl).read())
lParser.close()
for item in urlText:
print (item)
现在如果你运行这个代码你会得到这个错误
TypeError: Can't convert 'bytes' object to str implicitly
那是因为 HTMLParser.feed()
只接受字符串,而 urllib.request.urlopen().read()
将原始数据生成为字节。所以我们要将这个原始数据解码为 utf8。在第 19 行,我们在 read()
之后添加 .decode('utf8')
。
最终代码看起来像
from html.parser import HTMLParser
import urllib.request
urlText = []
#Define HTML Parser
class parseText(HTMLParser):
def handle_data(self, data):
if data != '\n':
urlText.append(data)
#Create instance of HTML parser
lParser = parseText()
thisurl = "http://www-rohan.sdsu.edu/~gawron/index.html"
#Feed HTML file into parsers
lParser.feed(urllib.request.urlopen(thisurl).read().decode('utf8'))
lParser.close()
for item in urlText:
print (item)
将字节转换为 sting 也适用于第 19 行
lParser.feed(str(urllib.request.urlopen(thisurl).read()))
但是如果我使用这个 handle_data 将无法识别任何空格,例如“\n”。
所以代码在不删除任何'\n'的情况下工作正常。
所以我尝试在 python 中使用 HTMLParser 和 urllib3 在 python 中制作网络爬虫。目前我有两个不同的导入问题,第一个是
import html.parser
import urllib
urlText = []
#Define HTML Parser
class parseText(HTMLParser.HTMLParser):
def handle_data(self, data):
if data != '\n':
urlText.append(data)
#Create instance of HTML parser
lParser = parseText()
thisurl = "http://www-rohan.sdsu.edu/~gawron/index.html"
#Feed HTML file into parser
lParser.feed(urllib.urlopen(thisurl).read())
lParser.close()
for item in urlText:
print (item)
使用此代码 returns visual studio 错误框中的错误
name 'HTMLParser' is not defined
第二个选项完全相同,但使用 import HTMLParser 而不是 html.parser
import HTMLParser
import urllib
urlText = []
#Define HTML Parser
class parseText(HTMLParser.HTMLParser):
def handle_data(self, data):
if data != '\n':
urlText.append(data)
#Create instance of HTML parser
lParser = parseText()
thisurl = "http://www-rohan.sdsu.edu/~gawron/index.html"
#Feed HTML file into parser
lParser.feed(urllib.urlopen(thisurl).read())
lParser.close()
for item in urlText:
print (item)
哪个returns错误
No module named 'markupbase'
我对这些包裹失去了理智。有没有人知道修复或看到问题。 Ps。我是 运行 这个 Visual studio 2016 年 Python 3.5
我也在按照您正在学习的相同教程学习网络爬虫。我昨天 运行 该代码时也遇到了这些问题。经过几次 google 搜索后,我解决了这些问题。我是 python 和网络爬虫的新手,如果我说错了请纠正我。
如果您使用的是 python 3.5,则应导入 HTMLParser from html.parser
和 urllib.request
。
在第 7 行,您必须继承 HTMLParser 而不是 HTMLParser.HTMLParser。
此时你的代码应该是这样的
from html.parser import HTMLParser
import urllib.request
urlText = []
#Define HTML Parser
class parseText(HTMLParser):
def handle_data(self, data):
if data != '\n':
urlText.append(data)
#Create instance of HTML parser
lParser = parseText()
thisurl = "http://www-rohan.sdsu.edu/~gawron/index.html"
#Feed HTML file into parsers
lParser.feed(urllib.request.urlopen(thisurl).read())
lParser.close()
for item in urlText:
print (item)
现在如果你运行这个代码你会得到这个错误
TypeError: Can't convert 'bytes' object to str implicitly
那是因为 HTMLParser.feed()
只接受字符串,而 urllib.request.urlopen().read()
将原始数据生成为字节。所以我们要将这个原始数据解码为 utf8。在第 19 行,我们在 read()
之后添加 .decode('utf8')
。
最终代码看起来像
from html.parser import HTMLParser
import urllib.request
urlText = []
#Define HTML Parser
class parseText(HTMLParser):
def handle_data(self, data):
if data != '\n':
urlText.append(data)
#Create instance of HTML parser
lParser = parseText()
thisurl = "http://www-rohan.sdsu.edu/~gawron/index.html"
#Feed HTML file into parsers
lParser.feed(urllib.request.urlopen(thisurl).read().decode('utf8'))
lParser.close()
for item in urlText:
print (item)
将字节转换为 sting 也适用于第 19 行
lParser.feed(str(urllib.request.urlopen(thisurl).read()))
但是如果我使用这个 handle_data 将无法识别任何空格,例如“\n”。 所以代码在不删除任何'\n'的情况下工作正常。