我有一系列网页,我想要从中抓取文本,不幸的是,这些网页都遵循不同的模式。我正在尝试编写一个在<br>
标记之后提取文本的scraper,因为该结构对所有页面都是通用的。
这些页面遵循三个基本模式,我可以说:
正如我现在所做的那样,我正在使用以下循环进行抓取:
for br in soup.find_all('br'):
text = br.next_sibling
try:
print text.strip().replace("\t", " ").replace("\r", " ").replace('\n', ' ')
except AttributeError:
print('...')
虽然这个脚本适用于某些页面,但只能为其他页面抓取部分或全部文本。在过去的几天里,我一直在梳理我的头发,所以任何帮助都会非常感激。
此外,我已经尝试了this technique,但无法使其适用于所有网页。
答案 0 :(得分:1)
我仍然会继续依赖span元素的underline
样式。以下是一个示例代码,可帮助您入门(使用.next_siblings
):
for span in soup.select('p > span[style*=underline]'):
texts = []
for sibling in span.next_siblings:
# break upon reaching the next span
if sibling.name == "span":
break
text = sibling.get_text(strip=True) if isinstance(sibling, Tag) else sibling.strip()
if text:
texts.append(text.replace("\n", " "))
if texts:
text = " ".join(texts)
print(span.text.strip(), text.strip())