html元素的XPath

时间:2018-08-21 16:55:39

标签: python xpath scrapy

我想使用Scrapy来抓取数百个网站,并只抓取基本的(标题,元*和正文)html元素。我知道我应该为此使用CrawlSpider并根据broad crawls调整一些设置。我很难弄清楚的部分是如何使用xpath创建用于仅刮除那些基本html元素的规则。我看到很多教程都涉及检查元素并为该元素找到css类。对于body元素来说很好,但是title和meta标签呢?

3 个答案:

答案 0 :(得分:0)

您可以像在<head>中一样在<body>中搜索元素,例如:

//html/head/title

//html/head/meta

答案 1 :(得分:0)

您可以使用XPath和CSS选择器来选择HTML中的节点。 该元素是一个节点,但该节点并不总是一个元素。 因此,您知道 head meta body 都是元素。 div中的 class 属性与meta元素中的 charset 属性相同。它们都是属性节点。

例如:

<!DOCTYPE html> 
<html lang='zh-cn'>
  <head>
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="renderer" content="webkit">
    <title>title</title> 
  </head>
  <body>   
     <div>website content</div> 
  </body>
</html>

如果要选择

<meta http-equiv='X-UA-Compatible' content='IE=edge'>

您可以像这样使用XPATH:

//head/meta[@http-equiv="X-UA-Compatible"]

答案 2 :(得分:0)

对于标题节点,您可以编写一个简单的XPath表达式://title,它是/descendant-or-self::node()/child::title的缩写语法,仅此而已。 对于元节点,请猜测您也可以写//meta,或者如果您想使用绝对路径/html/head/meta

PS。您可以对body节点执行相同的操作。