如何使用xpath在<dl>标记内获取数据

时间:2019-01-02 15:29:15

标签: html xpath scrapy

我正在使用Scrapy抓取一个网站。我有以下html结构

<dl>
  <dt><b>Notice Date</b></dt>
     <dd>12/17/2018<br>&nbsp;</dd>
  <dt><b>Notice Type</b></dt>
     <dd>Synopsis<br>&nbsp;</dd>
  <dt><b>NAICS</b></dt>
     <dd>238990 — All Other Specialty Trade Contractors<br>&nbsp;</dd>
  <dt><b>Contracting Office</b></dt>
     <dd>1108 South R Street Fort McCoy WI 54656-5142<br>&nbsp;</dd>
  <dt><b>ZIP Code</b></dt>
     <dd>54656-5142<br>&nbsp;</dd>
  <dt><b>Solicitation Number</b></dt>
     <dd>W911SA-18-B-2028<br>&nbsp;</dd>
  <dt><b>Point of Contact</b></dt>
     <dd>Jamie Gregar, Contract Specialist, Phone 6083881007 <br>&nbsp;</dd>
  <dt><b>E-Mail Address</b></dt>
     <dd><a href="mailto:jamie.j.gregar.civ@mail.mil">jamie.j.gregar.civ@mail.mil</a<br>&nbsp;</dd>
  <dt><b>Small Business Set-Aside</b></dt>
     <dd>HUBZone<br>&nbsp;</dd>
  <dt><b>Description</b></dt>
     <dd>some description here<br>&nbsp; </dd>
  <dt><b>Web Link</b></dt>
     <dd><a target="outside" href="https://www.fbo.gov/notices/54ba577b59c07b3757739e138b20ef3c">
Link To Document</a> <br>(https://www.fbo.gov/notices/54ba577b59c07b3757739e138b20ef3c)
<br>&nbsp; </dd>
  <dt><b>Place of Performance</b></dt>
     <dd><i>Address:</i> Laredo, TX </dd>
     <dd><i>Zip Code:</i> 78040 </dd>
     <dd><i>Country:</i> US <br>&nbsp; </dd>
  <dt><b>Record</b> </dt>
     <dd>SN05176005-F 20181219/181217230006 (fbodaily.com) <br>&nbsp; </dd>
  <dt><b>Source</b></dt>
     <dd><a target="fedbizopps" href="ftp://ftp.fbo.gov/FBOFeed20181217"> FedBizOpps Link to This Notice</a><br>(may not be valid after Archive Date) </dd>

</dl>

在上面的结构中,您可以看到<dt>标签是指数据的标题,后面紧跟着<dd>标签,其中将包含相关数据,并且数据可能包含不同的类型(例如,电子邮件地址,文字,Web链接)。

到目前为止,我可以使用<dl>约定来使用xpath标签。因此,有人可以建议我一种使用xpath<dl>标签开始将这些数据分别放入给定字段的方法。

1 个答案:

答案 0 :(得分:0)

for dt in response.css('dt'):
   key = dt.get()
   value = dt.xpath('./following::dd[1]').get()

您可能希望进一步清理数据,使用.//text() XPath或extract_text()仅提取文本。