如何通过 scrapy 和 python 从另一个标签的子标签中提取数据?
How to extract data from tags which are child of another tag through scrapy and python?
这是我要从中提取数据的 html 代码。但是每当我 运行 我得到一些随机值。请任何人帮助我解决这个问题。
我要提取以下内容:Mumbai, Maharastra, 1958, government, UGC and Indian Institute of Technology, Bombay
。
HTML:
<div class="instituteInfo">
<ul class="clg-info">
<li>
<a href="link here" target="_blank">Mumbai</a>,
<a href="link here" target="_blank">Maharashtra</a>
</li>
<li>Estd : <span>1958</span></li>
<li>Ownership : <span>Government</span></li>
<li>Approved By : <span>UGC</span></li>
<li>Affiliated To : <a href="link">Indian Institute of Technology, Bombay</a></li>
</div>
这是scrapy中parse函数的代码
def parse(self, response):
for students in response.css('div.topBlockInstituteInfoBottom'):
yield {
'name': students.css('h1.titleNameCol::text').extract(),
'city': students.css('ul.clg-info li a::text')[0].extract(),
'state': students.css('ul.clg-info li a::text')[1].extract(),
'estd': students.css('ul.clg-info li span::text')[0].extract(),
'ownership': students.css('ul.clg-info li span::text')[3].extract(),
'approved by': students.css('ul.clg-info li span::text')[4].extract(),
'affiliation': students.css('ul.clg-info li a::text')[5].extract(),
}
即使您没有提供与手头问题有关的太多细节,例如您得到的输出或网站和问题,我愿意花钱说问题出在 Rangers 上你输入了你的物品清单...
您所说的 return 值是 random/incorrect 来自 运行ning spider... 就像您抓取不同...研究所的网站整个目录一样?这意味着 html 片段只是您废弃的许多其他页面之一??如果是这样...
那么您的问题肯定是范围问题...您使用的范围是 select 来自同一节点中其他人的标签...但是如果站点中的页面不是全部相同的?范围保持不变,但内容的位置不同,因此您将获得 none 个值。
在for循环中..
def parse(self, response):
for students in response.css('div.topBlockInstituteInfoBottom'):
你使用的 css 值我无法验证它是否正确,因为我不知道有问题的网站但是采用你显示的 HTML 片段...... css 循环中的值是错误的...
<div class="instituteInfo">
<ul class="c...
又一次...
for students in response.css('div.topBlockInstituteInfoBottom'):
看看我要去哪里?应该为你使用 .instituteInfo css 循环中的值...
Written with StackEdit.
更新答案
正如我所怀疑的那样,我检查了该网站,当然...并不是所有关于机构简介的个人页面都会有所有相同的信息,因为它们的结构会略有不同,但一个节点关闭足以使您的数据成为垃圾。
非常细微的差别...仅此而已
这是因为 opf 使用 xpath 是彻头彻尾的关键,如果你不熟悉......基本上你可以使用特殊语法来 furthurpin-target 你的数据没有任何 if,ands 或 buts(如果你做对了就是...)
它作为结构化数据的正则表达式,例如 html、xml、markdown 等...您可以使用 .. 参数?例如包含...所以我想进一步说明路径中的 WHICH link(当然是 href 的“a”标签),我将使用“Next”一词 ...
//html/body/..../a[contains(., "next")]/@href
你可以直接使用
//a[contains(., "next")]/@href
但是您可以越具体地说明您的内容或节点的路径,您就越不可能 运行 陷入任何混乱..相反,您的解析。
在你的情况下......这样做。确切地说,虽然我不会带走所有的乐趣,但这是为了学习一些新东西,哈哈……这是一个应该是什么样子的……
response.xpath("//ul@class='clg-info'/li[包含(.,'Ownership')]/span/text().extract()
你不需要在 scrapy shell 中检查它输出的内容,如果你使用任何浏览器开发工具然后在里面执行 ctrl+f 或搜索...它应该允许 xpath 但是的......输出是“私人”......因为我基本上在'clg-info'的path/node-level中声明我正在寻找即将到来的包含纯文本词所有权的li.. . doenst 也必须是完整的单词,但是是的......然后不得不在 span 上移动......你只需要在做它的时候看看 html 就很明显了。
... 专业提示... 我之前给出的关于查找 link ... /a 标签的示例,其中包含 wordnext...你能想到这有什么用吗?? =) 在网页中导航可能会很痛苦,但知道你的 xpath 和正则表达式,没有你无法解析的内容......射击......一旦你做好了,你就可以开始真正理解如何在网页中去混淆 js 了。用手...其中一个娘娘腔 jnice studfflol
这是我要从中提取数据的 html 代码。但是每当我 运行 我得到一些随机值。请任何人帮助我解决这个问题。
我要提取以下内容:Mumbai, Maharastra, 1958, government, UGC and Indian Institute of Technology, Bombay
。
HTML:
<div class="instituteInfo">
<ul class="clg-info">
<li>
<a href="link here" target="_blank">Mumbai</a>,
<a href="link here" target="_blank">Maharashtra</a>
</li>
<li>Estd : <span>1958</span></li>
<li>Ownership : <span>Government</span></li>
<li>Approved By : <span>UGC</span></li>
<li>Affiliated To : <a href="link">Indian Institute of Technology, Bombay</a></li>
</div>
这是scrapy中parse函数的代码
def parse(self, response):
for students in response.css('div.topBlockInstituteInfoBottom'):
yield {
'name': students.css('h1.titleNameCol::text').extract(),
'city': students.css('ul.clg-info li a::text')[0].extract(),
'state': students.css('ul.clg-info li a::text')[1].extract(),
'estd': students.css('ul.clg-info li span::text')[0].extract(),
'ownership': students.css('ul.clg-info li span::text')[3].extract(),
'approved by': students.css('ul.clg-info li span::text')[4].extract(),
'affiliation': students.css('ul.clg-info li a::text')[5].extract(),
}
即使您没有提供与手头问题有关的太多细节,例如您得到的输出或网站和问题,我愿意花钱说问题出在 Rangers 上你输入了你的物品清单...
您所说的 return 值是 random/incorrect 来自 运行ning spider... 就像您抓取不同...研究所的网站整个目录一样?这意味着 html 片段只是您废弃的许多其他页面之一??如果是这样...
那么您的问题肯定是范围问题...您使用的范围是 select 来自同一节点中其他人的标签...但是如果站点中的页面不是全部相同的?范围保持不变,但内容的位置不同,因此您将获得 none 个值。
在for循环中..
def parse(self, response):
for students in response.css('div.topBlockInstituteInfoBottom'):
你使用的 css 值我无法验证它是否正确,因为我不知道有问题的网站但是采用你显示的 HTML 片段...... css 循环中的值是错误的...
<div class="instituteInfo">
<ul class="c...
又一次...
for students in response.css('div.topBlockInstituteInfoBottom'):
看看我要去哪里?应该为你使用 .instituteInfo css 循环中的值...
Written with StackEdit.
更新答案
正如我所怀疑的那样,我检查了该网站,当然...并不是所有关于机构简介的个人页面都会有所有相同的信息,因为它们的结构会略有不同,但一个节点关闭足以使您的数据成为垃圾。
非常细微的差别...仅此而已
这是因为 opf 使用 xpath 是彻头彻尾的关键,如果你不熟悉......基本上你可以使用特殊语法来 furthurpin-target 你的数据没有任何 if,ands 或 buts(如果你做对了就是...)
它作为结构化数据的正则表达式,例如 html、xml、markdown 等...您可以使用 .. 参数?例如包含...所以我想进一步说明路径中的 WHICH link(当然是 href 的“a”标签),我将使用“Next”一词 ...
//html/body/..../a[contains(., "next")]/@href
你可以直接使用
//a[contains(., "next")]/@href
但是您可以越具体地说明您的内容或节点的路径,您就越不可能 运行 陷入任何混乱..相反,您的解析。
在你的情况下......这样做。确切地说,虽然我不会带走所有的乐趣,但这是为了学习一些新东西,哈哈……这是一个应该是什么样子的……
response.xpath("//ul@class='clg-info'/li[包含(.,'Ownership')]/span/text().extract()
你不需要在 scrapy shell 中检查它输出的内容,如果你使用任何浏览器开发工具然后在里面执行 ctrl+f 或搜索...它应该允许 xpath 但是的......输出是“私人”......因为我基本上在'clg-info'的path/node-level中声明我正在寻找即将到来的包含纯文本词所有权的li.. . doenst 也必须是完整的单词,但是是的......然后不得不在 span 上移动......你只需要在做它的时候看看 html 就很明显了。
... 专业提示... 我之前给出的关于查找 link ... /a 标签的示例,其中包含 wordnext...你能想到这有什么用吗?? =) 在网页中导航可能会很痛苦,但知道你的 xpath 和正则表达式,没有你无法解析的内容......射击......一旦你做好了,你就可以开始真正理解如何在网页中去混淆 js 了。用手...其中一个娘娘腔 jnice studfflol