我试图刮一个网页,其中有一个未知数量的< p>标签,在一个已知的div类之间。有些网页只有1< p>个标签,而其他人有10个甚至更多。我怎么能提取他们所有?最好在一个变量内,所以我可以把他们存储在一个csv内像所有其他数据的我刮:)
HTML结构如下例所示:
<div class="div_name">
<h2 class="h5">title text</h2>
<p> </p>
<p>text text text...</p>
<p>text text text...</p>
<p> </p>
<p><br>text text text...</p>
<p> </p>
<p><br>text text text...</p>
<p> </p>
<p><br>text text text...</p>
<p> </p>
<p><br>text text text...</p>
<p> </p>
<p>text text text...</p>
<p> </p>
<p><br>text text text...</p>
<p> </p>
<p><br>text text text...</p>
<p> </p>
<p><br>text text text...</p>
<p>text text text...</p>
<p>text text text...</p>
</div>
我使用python和scrapy框架来实现这一点。
目前我有:
divs = response.xpath('/html/body/div[6]/div/section[2]/article/div/div/div')
for p in divs.xpath('.//p'): # extracts all <p> inside
print(p.get())
story = p
yield {
'story': story
}
它会打印各种标记的所有文本值< p>,但在存储到csv文件时,只有最后一个< p>值会插入到 *. csv文件中。
为了将抓取的数据存储到 *.csv中,我在我的www.example.com中有以下内容settings.py:
# Deph of Crawler
DEPTH_LIMIT = 0 # 0 = Infinite depth
# Feed Export Settings
FEED_FORMAT="csv"
FEED_URI="output_%(name)s.csv"
和上面的 yield 部分是进入 *. csv的字段。
顺致问候!
2条答案
按热度按时间ymdaylpp1#
你可以用一句话来表达,真的:
如果你能确认这个页面的URL,我可能会改进这个又长又脆弱的XPATH。
可在https://docs.scrapy.org/en/latest/中找到Scrapy文档
mm9b1k5b2#
您必须存储所有p标签的文本,然后使用空格或换行符或任何您想要的方式将它们连接起来,然后将其赋值给story变量。