使用带有Scrapy的CSS来提取没有标签的所有文本 - 失败

时间:2017-10-31 17:38:26

标签: css text web-scraping tags scrapy

我看到很多Xpath答案,但没有CSS答案。我成功地提取了我需要的所有文字 - 但它完全被包裹了#39;标签,字体详细信息等。我在this网站上提取了一些角色说明。

我正在使用的代码改编自Scrapy教程 - 我想从网站上为每个角色提取所有与工作相关的文本:

import Control.Monad (ap, liftM)
import Control.Applicative (Alternative (..))

newtype Parser a = Parser
  { runParser :: String -> [(a, String)] }

instance Functor Parser where
  fmap = liftM

instance Applicative Parser where
  pure v = Parser $ \inp -> [(v, inp)]
  (<*>) = ap

instance Monad Parser where
  -- The next line isn't required for
  -- recent GHC versions
  -- return = pure

  Parser m >>= f = Parser $ \s ->
    [(r, s'') | (x, s') <- m s
              , (r, s'') <- runParser (f r) s']

(+++) :: Parser a -> Parser a -> Parser a
p +++ q = Parser $ \inp -> case runParser p inp of
  [] -> runParser q inp
  [(v, out)] -> [(v, out)]

failure :: Parser a
failure = Parser $ \inp -> []

instance Alternative Parser where
  (<|>) = (+++)
  empty = failure

instance MonadPlus Parser

我对特定页面的结果包括所有文本,还包括html标记和元素,包括span,style,font-size。

如何使用CSS按照网站上的外观顺序获取干净的文字?理想情况下,我希望保留段落样式并最终将其传递到Excel / CSV中的一个单元格。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果css选择器正是您想要的,您可以使用w3lib中的remove_tags方法,但我不认为在您的情况下这是必要的,请尝试这样:

'role-description': extract_with_css('#ctl00_regionContent_lblJobDescription span *::text')