在使用类抓取任何Web数据时,我对python完全是新手。所以,提前为任何严重的错误道歉。我编写了一个脚本来使用维基百科网站上的a
标记来解析文本。我尝试从我的级别准确地编写代码,但出于某种原因,当我执行代码时,它会抛出错误。下面给出了我所拥有的代码和错误,供你考虑。
剧本:
import requests
from lxml.html import fromstring
class TextParser(object):
def __init__(self):
self.link = 'https://en.wikipedia.org/wiki/Main_Page'
self.storage = None
def fetch_url(self):
self.storage = requests.get(self.link).text
def get_text(self):
root = fromstring(self.storage)
for post in root.cssselect('a'):
print(post.text)
item = TextParser()
item.get_text()
错误:
Traceback (most recent call last):
File "C:\Users\mth\AppData\Local\Programs\Python\Python35-32\testmatch.py", line 38, in <module>
item.get_text()
File "C:\Users\mth\AppData\Local\Programs\Python\Python35-32\testmatch.py", line 33, in get_text
root = fromstring(self.storage)
File "C:\Users\mth\AppData\Local\Programs\Python\Python35-32\lib\site-packages\lxml\html\__init__.py", line 875, in fromstring
is_full_html = _looks_like_full_html_unicode(html)
TypeError: expected string or bytes-like object
答案 0 :(得分:1)
您正在执行以下两行
item = TextParser()
item.get_text()
初始化TextParser
时,self.storage
等于无。当你执行函数get_text()时,它仍然等于None。这就是你得到那个错误的原因。
但是,如果将其更改为以下内容。 self.storage
应填充字符串而不是无字符串。
item = TextParser()
item.fetch_url()
item.get_text()
如果你想调用函数get_text而不调用fetch_url,你可以这样做。
def get_text(self):
self.fetch_url()
root = fromstring(self.storage)
for post in root.cssselect('a'):
print(post.text)