无法执行我的类爬虫

时间:2017-10-18 20:23:06

标签: python python-3.x class web-scraping

在使用类抓取任何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

1 个答案:

答案 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)