使用BeautifulSoup后提取文本

时间:2015-12-21 22:45:28

标签: python html regex web-scraping bs4

我有一系列网页,我想要从中抓取文本,不幸的是,这些网页都遵循不同的模式。我正在尝试编写一个在<br>标记之后提取文本的scraper,因为该结构对所有页面都是通用的。

这些页面遵循三个基本模式,我可以说:

  1. http://www.p2016.org/ads1/bushad120215.html
  2. http://www.p2016.org/ads1/christiead100515.html
  3. http://www.p2016.org/ads1/patakiad041615.html
  4. 正如我现在所做的那样,我正在使用以下循环进行抓取:

      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,但无法使其适用于所有网页。

1 个答案:

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