问题描述
我成功跟随this tutorial(使用python request-html进行解析/抓取)。但是,当我要调整代码以添加包含url的列时,但是后来我意识到我将要使用的类(.question-hyperlink)已经用于解析问题本身。
结果:
尝试:
def parse_tagged_page(html):
question_summaries = html.find(".question-summary")
key_names = ['question','Votes','tags','summary','url']
classes_needed = ['.question-hyperlink','.Vote','.tags','.summary','.question-hyperlink' ]
datas = []
for q_el in question_summaries:
question_data = {}
for i,_class in enumerate(classes_needed):
sub_el = q_el.find(_class,first=True)
keyname = key_names[i]
question_data[keyname] = clean_scraped_data(sub_el.text,keyname=keyname)
datas.append(question_data)
return datas
解决方法
URL包含在href
元素的a
属性中,将sub_el.text
传递给函数clean_scraped_data()
不会有帮助。您可能应该重构此功能:
def clean_scraped_data(el,keyname=None):
if keyname == 'votes':
return el.text.replace('\nvotes','')
elif keyname == 'url':
return f"https://stackoverflow.com{el.attrs['href']}"
return el.text
应相应地调整函数调用:
clean_scraped_data(sub_el,keyname=keyname)