我正在使用Scrapy
来抓取网站。我有以下 html 结构
<dl>
<dt><b>Notice Date</b></dt>
<dd>12/17/2018<br> </dd>
<dt><b>Notice Type</b></dt>
<dd>Synopsis<br> </dd>
<dt><b>NAICS</b></dt>
<dd>238990 — All Other Specialty Trade Contractors<br> </dd>
<dt><b>Contracting Office</b></dt>
<dd>1108 South R Street Fort McCoy WI 54656-5142<br> </dd>
<dt><b>ZIP Code</b></dt>
<dd>54656-5142<br> </dd>
<dt><b>Solicitation Number</b></dt>
<dd>W911SA-18-B-2028<br> </dd>
<dt><b>Point of Contact</b></dt>
<dd>Jamie Gregar, Contract Specialist, Phone 6083881007 <br> </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> </dd>
<dt><b>Small Business Set-Aside</b></dt>
<dd>HUBZone<br> </dd>
<dt><b>Description</b></dt>
<dd>some description here<br> </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> </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> </dd>
<dt><b>Record</b> </dt>
<dd>SN05176005-F 20181219/181217230006 (fbodaily.com) <br> </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链接)组成。
到目前为止,我可以使用xpath
约定获得<dl>
标签。所以有人可以建议我一种使用从标签开始xpath
将这些数据分别放入给定字段中的方法<dl>
。
for dt in response.css('dt'):
key = dt.get()
value = dt.xpath('./following::dd[1]').get()
您可能希望进一步清理数据,通过使用 XPath 或 extract_text()
.//text()
仅提取文本。