如何使用Scrapy爬取指定的HTML代码片段?
使用Scrapy爬取指定HTML片段中的日期信息
嘿,我来帮你搞定这个爬取需求!你要提取的日期藏在带样式div的<td>元素里,其实用Scrapy的选择器就能轻松搞定,下面是具体的实现步骤和代码示例:
1. 定位目标元素
首先,目标日期所在的<td>嵌套在id为pageData11的<tbody>下的<tr>中,我们可以用XPath或者CSS选择器精准定位到这个节点:
- XPath写法:
//tbody[@id="pageData11"]/tr/td - CSS选择器写法:
tbody#pageData11 tr td
2. 提取并清理日期文本
因为<td>里除了日期文本,还有前面那个带左边框的div(里面是 空白字符),所以提取后需要清理掉多余的空白内容。这里有两种靠谱的方式:
方式一:拼接所有文本节点后清理
这种方法会把<td>下所有的文本内容(包括div里的空白)都取出来,再用strip()去掉前后的空白,自动过滤掉中间的无效空格:
import scrapy class DateSpider(scrapy.Spider): name = "date_spider" # 替换成你实际要爬取的页面URL start_urls = ['https://your-target-url.com'] def parse(self, response): # 用XPath定位目标td target_td = response.xpath('//tbody[@id="pageData11"]/tr/td') # 提取所有文本节点并拼接,再清理空白 clean_date = ''.join(target_td.xpath('.//text()').getall()).strip() # 输出结果,你也可以保存到文件或数据库 yield { 'extracted_date': clean_date }
方式二:直接定位日期对应的文本节点
如果页面结构稳定,我们可以直接定位到日期所在的第二个文本节点(第一个是div后面的空白),这样更精准:
def parse(self, response): # 直接获取日期对应的文本节点 clean_date = response.xpath('//tbody[@id="pageData11"]/tr/td/text()[2]').get().strip() yield { 'extracted_date': clean_date }
3. 测试爬虫
写完代码后,运行以下命令启动爬虫,结果会输出到dates.json文件里:
scrapy crawl date_spider -o dates.json
打开dates.json就能看到提取到的2018-May-29 Tuesday啦!
内容的提问来源于stack exchange,提问作者Mohan Anton
相关产品推荐
相关产品推荐

