Xpath grep 元素
Xpath grep elements
我正在使用 Scrapy Python 来尝试从站点中获取数据。
我如何用 Xpath grep 这个结构?
<div class="foo">
<h3>Need this text_1</h3>
<table class="thesamename">
<tbody>
<tr>
<td class="tmp_year">
<a href="/link1">45767</a>
</td>
<td class="tmp_outcome">
<b>Win_1</b><br>
<span class="tmp_category">TEST_1</span>
</td>
</tr>
<tr>
<td class="tmp_year">
<a href="/link1">1232004</a>
</td>
<td class="tmp_outcome">
<b>Win_2</b><br>
<span class="tmp_category">TEST_2</span>
</td>
</tr>
<tr>
<td class="tmp_year">
<a href="/link1">122004</a>
</td>
<td class="tmp_outcome">
<b>Win_3</b><br>
<span class="tmp_category">TEST_3</span>
</td>
</tr>
</tbody>
<h3>Need this text_2</h3>
<table class="thesamename">
<tbody>
<td class="tmp_year">
<a href="/link1">234</a>
</td>
<td class="tmp_outcome">
<b>Win_E</b><br>
<span class="tmp_category">TEST_E</span>
</td>
</tr>
<tr>
<td class="tmp_year">
<a href="/link1">3476</a>
</td>
<td class="tmp_outcome">
<b>Win_C</b><br>
<span class="tmp_category">TEST_C</span>
</td>
</tr>
</tbody>
<h3>Need this text_3</h3>
<table class="thesamename">
<tbody>
<tr>
<td class="tmp_year">
<a href="/link1">85567</a>
</td>
<td class="tmp_outcome">
<b>Win_T</b><br>
<span class="tmp_category">TEST_T</span>
</td>
</tr>
<tr>
<td class="tmp_year">
<a href="/link1">435656</a>
</td>
<td class="tmp_outcome">
<b>Win_A</b><br>
<span class="tmp_category">TEST_A</span>
</td>
</tr>
<tr>
<td class="tmp_year">
<a href="/link1">980</a>
</td>
<td class="tmp_outcome">
<b>Win_Z</b><br>
<span class="tmp_category">TEST_Z</span>
</td>
</tr>
</tbody>
我想要这种结构的输出:
"Section": {
Need this text_1 :
[45767 : Win_1 : TEST_1]
[1232004 : Win_2 : TEST_2]
[122004: Win_3 : TEST_3]
,
Need this text_2:
[234 : Win_E : TEST_E]
[3476 : Win_C : TEST_C]
,
Need this text_3:
[85567 : Win_T : TEST_T]
[435656 : Win_A : TEST_A]
[980: Win_Z : TEST_Z]
}
如何创建正确的 xpath select 来采用此结构?
我可以单独使用所有 "h3" ,所有 "a" 然后所有带有 class 的标签,但我如何匹配?
你说 GREP?!大声笑好吧,你这样命名是完全错误的,但是为了保持行话的简洁以理解你的 parsing/extracting... 对 scrapy 这么陌生?或网络开发方面的事情?不管怎样...我无法指望在此处的一个答案中教您如何 xpth/regex 像专业人士一样...唯一的方法是让您坚持下去,但我投入了我的意见。
首先,对于必须按照标准构建的网站,xpath 非常有用,这并没有使它们变坏,但是在您提供的 html 代码片段中......它的结构很好太好了..我推荐css extract ..这些是价值...
year = response.css('td.tmp_year a::text').extract()
outcome = response.css('td.tmp_outcome b::text').extract()
category= response.css('span.tmp_category::text').extract()
专业提示:无论您认为有必要,您都可以将网页另存为 HTML 文件,然后通过引用直接文件路径来使用 scrapy shell ...所以我将 html 片段保存到我桌面上的文件中,然后 运行...
scrapy shell file:///home/scriptso/Desktop/letsGREPlol.html
无论如何...至于 xpath...自从您问大声笑...蛋糕。让我们将 xpath 与 css 进行比较,然后告诉我您可以看到……它?哈哈
response.css('td.tmp_outcome b::text').提取物()
td 标签也是如此....并且 class 名称是 tmp_outcome,然后下一个节点是一个粗体标签...其中文本因此将其声明为带有 :: 的文本文字
response.xpath('//td[@class="tmp_outcome"]/b/text()').extract()
所以 xpath 基本上是说我们在整个站点的 td 标签中加注星标...和 class= tmp_outcome,然后是粗体,然后在 xpath 中声明类型 /text() 用于文本.... /@href 用于.. 是的,你猜对了
我正在使用 Scrapy Python 来尝试从站点中获取数据。 我如何用 Xpath grep 这个结构?
<div class="foo">
<h3>Need this text_1</h3>
<table class="thesamename">
<tbody>
<tr>
<td class="tmp_year">
<a href="/link1">45767</a>
</td>
<td class="tmp_outcome">
<b>Win_1</b><br>
<span class="tmp_category">TEST_1</span>
</td>
</tr>
<tr>
<td class="tmp_year">
<a href="/link1">1232004</a>
</td>
<td class="tmp_outcome">
<b>Win_2</b><br>
<span class="tmp_category">TEST_2</span>
</td>
</tr>
<tr>
<td class="tmp_year">
<a href="/link1">122004</a>
</td>
<td class="tmp_outcome">
<b>Win_3</b><br>
<span class="tmp_category">TEST_3</span>
</td>
</tr>
</tbody>
<h3>Need this text_2</h3>
<table class="thesamename">
<tbody>
<td class="tmp_year">
<a href="/link1">234</a>
</td>
<td class="tmp_outcome">
<b>Win_E</b><br>
<span class="tmp_category">TEST_E</span>
</td>
</tr>
<tr>
<td class="tmp_year">
<a href="/link1">3476</a>
</td>
<td class="tmp_outcome">
<b>Win_C</b><br>
<span class="tmp_category">TEST_C</span>
</td>
</tr>
</tbody>
<h3>Need this text_3</h3>
<table class="thesamename">
<tbody>
<tr>
<td class="tmp_year">
<a href="/link1">85567</a>
</td>
<td class="tmp_outcome">
<b>Win_T</b><br>
<span class="tmp_category">TEST_T</span>
</td>
</tr>
<tr>
<td class="tmp_year">
<a href="/link1">435656</a>
</td>
<td class="tmp_outcome">
<b>Win_A</b><br>
<span class="tmp_category">TEST_A</span>
</td>
</tr>
<tr>
<td class="tmp_year">
<a href="/link1">980</a>
</td>
<td class="tmp_outcome">
<b>Win_Z</b><br>
<span class="tmp_category">TEST_Z</span>
</td>
</tr>
</tbody>
我想要这种结构的输出:
"Section": {
Need this text_1 :
[45767 : Win_1 : TEST_1]
[1232004 : Win_2 : TEST_2]
[122004: Win_3 : TEST_3]
,
Need this text_2:
[234 : Win_E : TEST_E]
[3476 : Win_C : TEST_C]
,
Need this text_3:
[85567 : Win_T : TEST_T]
[435656 : Win_A : TEST_A]
[980: Win_Z : TEST_Z]
}
如何创建正确的 xpath select 来采用此结构? 我可以单独使用所有 "h3" ,所有 "a" 然后所有带有 class 的标签,但我如何匹配?
你说 GREP?!大声笑好吧,你这样命名是完全错误的,但是为了保持行话的简洁以理解你的 parsing/extracting... 对 scrapy 这么陌生?或网络开发方面的事情?不管怎样...我无法指望在此处的一个答案中教您如何 xpth/regex 像专业人士一样...唯一的方法是让您坚持下去,但我投入了我的意见。
首先,对于必须按照标准构建的网站,xpath 非常有用,这并没有使它们变坏,但是在您提供的 html 代码片段中......它的结构很好太好了..我推荐css extract ..这些是价值...
year = response.css('td.tmp_year a::text').extract()
outcome = response.css('td.tmp_outcome b::text').extract()
category= response.css('span.tmp_category::text').extract()
专业提示:无论您认为有必要,您都可以将网页另存为 HTML 文件,然后通过引用直接文件路径来使用 scrapy shell ...所以我将 html 片段保存到我桌面上的文件中,然后 运行...
scrapy shell file:///home/scriptso/Desktop/letsGREPlol.html
无论如何...至于 xpath...自从您问大声笑...蛋糕。让我们将 xpath 与 css 进行比较,然后告诉我您可以看到……它?哈哈
response.css('td.tmp_outcome b::text').提取物() td 标签也是如此....并且 class 名称是 tmp_outcome,然后下一个节点是一个粗体标签...其中文本因此将其声明为带有 :: 的文本文字
response.xpath('//td[@class="tmp_outcome"]/b/text()').extract() 所以 xpath 基本上是说我们在整个站点的 td 标签中加注星标...和 class= tmp_outcome,然后是粗体,然后在 xpath 中声明类型 /text() 用于文本.... /@href 用于.. 是的,你猜对了