python - Scrapy 列表选择器
问题描述
我正在尝试遍历scrapy中的列表,这是html示例:
<html>
<head>
<base href='http://example.com/' />
<title>Example website</title>
</head>
<body>
<div id='images'>
<a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
<a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
<a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
<a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
<a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
</div>
<ol class="jobs">
<li class="job ">
<div id="logoso-listing">
<img width="100" height="100" class="alignleft size-thumbnail wp-image-22824">
</div>
<div id="titlo">
<strong><a href="http://link/">Text1</a></strong>
</div>
<div id="type-tag"><span class="jtype permanent">Permanent1</span></div>
<div id="type-tag-prev"><span class="jtype permanent">Permanent1</span></div>
</li>
<li class="job ">
<div id="logoso-listing">
<img width="100" height="100" class="alignleft size-thumbnail wp-image-22824">
</div>
<div id="titlo">
<strong><a href="http://link/">Text2</a></strong>
</div>
<div id="type-tag"><span class="jtype permanent">Permanent2</span></div>
<div id="type-tag-prev"><span class="jtype permanent">Permanent2</span></div>
</li>
<li class="job ">
<div id="logoso-listing">
<img width="100" height="100" class="alignleft size-thumbnail wp-image-22824">
</div>
<div id="titlo">
<strong><a href="http://link/">Text3</a></strong>
</div>
<div id="type-tag"><span class="jtype permanent">Permanent3</span></div>
<div id="type-tag-prev"><span class="jtype permanent">Permanent3</span></div>
</li>
</ol>
</body>
</html>
这些是scrapy爬虫的命令:
content = response.xpath("//ol[@class = 'jobs']")
job_list = content.xpath("//li[contains(@class,'job')]")
for job in job_list:
job.xpath("//div[@id = 'titlo']/strong/a/text()").getall()
上面的代码返回:
['Text1', 'Text2', 'Text3']
['Text1', 'Text2', 'Text3']
['Text1', 'Text2', 'Text3']
虽然我的预期输出是:
['Text1']
['Text2']
['Text3']
我没有得到什么?这种垂直迭代,而我想以response
水平方式公开迭代。
解决方案
为什么不将 css 选择器用于strong
带有子标签的a
标签?
.css("strong a").getall()
您可能应该添加 id
#titlo strong a
对于 xpath
//*[@id='titlo']/strong/a
推荐阅读
- css - 设置问号点颜色?可能的?
- docker - 使用 Google Cloud Platform 的 Gitlab-CI 自动缩放未按预期生成
- php - 颁发令牌和刷新令牌:Laravel /jwt
- emacs - Emacs Prelude:如何禁用 perl 文件的 smartparens?
- dart - Android Manifest com.apptreesoftware.barcodescan 中的 Flutter 未解析包
- javascript - 从嵌套元素中检索链接
- c# - 在 PDF 表单中使用 ItextSharp 的动态内容
- java - 必须在 servlet 和异步请求处理中涉及的所有过滤器上启用异步支持
- deployment - 将 Angular 应用程序部署到 GitHub 页面,但 url 中没有项目名称
- google-apps-script - 使用宏按钮将多个工作表导出到 TSV