Scrapy爬虫需求:仅爬取A字母表格、清理HTML及补全PDF URL
解决方案
针对你的爬虫需求,需要做以下几处修改来实现目标:
1. 定位正确的法案数据行,仅保留字母'A'对应的条目
当前代码用.hasTip选中了页面顶部的字母选择栏(非目标数据),需要先定位到法案表格的行元素。步骤如下:
- 先通过浏览器开发者工具查看页面结构,找到包含法案数据的表格(比如带特定类名的
<table>标签),再定位表格内的行(如tr标签) - 遍历行时,先提取标题文本,判断是否以'A'开头,不符合则直接跳过
2. 提取纯文本内容,移除HTML元素
当前用.get()获取的是完整HTML节点,需要改用Scrapy的文本提取方法获取纯文本:
- 提取标题/日期:使用
::text伪元素获取节点内的所有文本片段,再用''.join()拼接并strip()去除多余空格 - 避免直接获取整个HTML节点,确保输出为纯文本内容
3. 补全PDF文件的完整URL
提取到的PDF链接通常是相对路径,用response.urljoin()方法拼接域名,生成可直接访问的完整URL。
修改后的完整parse函数示例
def parse(self, response): # 定位法案表格的行(根据实际页面结构调整选择器,示例假设表格行是tr) rows = response.css('table tr') for row in rows: # 提取标题纯文本 title_parts = row.css('td:nth-child(1) ::text').getall() title = ''.join(title_parts).strip() # 仅处理以'A'开头的条目 if not title or not title.startswith('A'): continue # 提取日期纯文本 date_parts = row.css('td:nth-child(2) ::text').getall() date = ''.join(date_parts).strip() # 提取PDF相对链接并补全域名 relative_url = row.css('td a::attr(href)').get() source_url = response.urljoin(relative_url) if relative_url else None yield { "title": title, "source_url": source_url, "date": date, }
注意事项
- 需根据页面实际HTML结构调整CSS选择器(比如表格的类名、列的位置、链接所在的元素),确保能精准定位目标数据
- 如果页面是点击字母'A'按钮后动态加载数据,则需要先构造对应请求(比如POST表单请求),获取加载后的页面再进行解析
内容的提问来源于stack exchange,提问作者Vicente Antonio G. Reyes
相关产品推荐
相关产品推荐

