【发布时间】:2021-07-17 20:58:07
【问题描述】:
我正在尝试从网站的 HTML 元素中抓取一些文本。大部分都很好,但由于某些原因,Scrapy 没有得到浏览器检查中显示的所有 HTML 元素。当我尝试禁用 JavaScript 但仍然在我的浏览器中显示那些缺失的元素时,内容是静态的。 该网站的结构类似于:
<ul class="paragraph-title">...</ul>
<ul class="paragraph-title">
<p>TEXT 1</p>
<p class="list-item">TEXT 2</p>
<p class="list-item">TEXT 3</p>
</ul>
<ul class="paragraph-title">
<p>TEXT 4</p>
<ol class="level-one"></ol>
<ol class="level-two">
<li class="level-two-item">TEXT 5</li>
<li class="level-two-item">TEXT 6</li>
</ol>
</ul>
<ul class="paragraph-title">...</ul>
这是我的 Scrapy Spider:
import scrapy
class MySpider(scrapy.Spider):
name = "MySpider"
start_urls = ['https://www.example.com']
def parse(self, response):
entries = response.css('ul.paragraph-title')
for entry in entries:
yield {
'text': entry.css('::text').getall()
}
当我在scrapy shell 中尝试entries[2].getall() 时,我注意到scrapy 在第三个ul 中找不到ol 和li 标签:
['<ul class="paragraph-title"><p>TEXT 4</p></ul>']
如何从 li 标签中获取“TEXT 5”和“TEXT 6”?
【问题讨论】:
-
呵呵,你在这里发现了一个奇怪的,用任何其他标签替换
ol,你的代码就可以工作了……很奇怪 -
@tomjn 那么这可能是scrapy的错误吗?
标签: python html scrapy web-crawler