爬取Tapd的缺陷记录

# -*- coding: utf-8 -*-
import scrapy
from urllib.parse import urlparse, parse_qs,parse_qsl

class TapdSpider(scrapy.Spider):
    name = 'tapd'
    allowed_domains = ['tapd.cn']
    url = 'https://www.tapd.cn/xxxxxxxx/bugtrace/bugreports/my_view&page={}'
    page = 1
    start_urls = ['https://www.tapd.cn/xxxxxxxx/bugtrace/bugreports/my_view&page={}'.format(str(page))]

    def parse(self, response):
        try:
            tr_list = response.xpath("//table[@id='bug_list_content']//tr[@class='rowNOTdone']")
            #写列表的时候我们只要定位到想要的父级,即存在多个同标签的位置,方便我们接下来去循环遍历
            for tr in tr_list:
                item = {}
                # 在当前的节点下方开始找元素,用./
                # 遇到想用的属性对应的属性值的时候,可以定位到该标签后,@属性的名称获取相应的值
                # extract()返回的是一个列表,extract_first()返回的是字符串,列表中的第一个字符串
                item["title"] = tr.xpath("./td[3]//span[2]/a/@title").extract_first()
                item["version"] = tr.xpath("./td[4]//@data-editable-value").extract_first()
                item["Severity"] = tr.xpath("./td[5]//@data-editable-value").extract_first()
                item["priority"] = tr.xpath("./td[6]//@data-editable-value").extract_first()
                item["statue"] = tr.xpath("./td[7]//@title").extract_first()
                item["Handler"] = tr.xpath("./td[8]//@data-editable-value").extract_first()
                item["Founder"] = tr.xpath("./td[9]//@title").extract_first()
                item["Creattime"] = tr.xpath('string(./td[10][contains(.,text())])').extract_first().strip()
                # response.xpath('string(元素的定位)[contains()]')
                # string可以获取同个父级多个子级的内容
                # contains()模糊查找当前的文本内容
                # strip()可以去除首尾的空格 举例strip('0'),可以去除首尾的0 仅针对字符串使用
                # https://blog.youkuaiyun.com/zhouxuan623/article/details/43935039/
                # xpath中starts-with、contains和text()三者区别
                item["href"] = tr.xpath("./td[3]//span[2]//@href").extract_first()
                Pending_url = item["href"]
                bug_id = parse_qs(urlparse(Pending_url).query)["bug_id"][0]
                # 我需要获取url地址中的部分项,重新拼接成新的url地址
                # https://blog.youkuaiyun.com/weixin_42902669/article/details/88907704
                detail_url = 'https://www.tapd.cn/xxxxxxxx/bugtrace/bugs/general_view/{}'.format(bug_id)

                yield scrapy.Request(
                        detail_url,
                        callback=self.parse_detial,
                        meta={"key": item}
                )
            self.page +=1
            next_url = self.url.format(str(self.page))
            print(next_url)
            yield scrapy.Request(
                next_url,
                callback=self.parse
            )
        except TypeError:
            print("爬取结束")

    def parse_detial(self, response):
        item = response.meta["key"]
        content = response.xpath("//div[@id='description_div']").xpath('string(.)').extract()[0]
        # 定位到要获取文本内容的父级,通过父级获取该父级下的子集所有文本内容,extract()[0] = extract_first()
        item["data"] = content
        yield item

API爬取TAPD(TestRail API,一个用于自动化测试管理系统的API)中的测试用例通常涉及到以下几个步骤: 1. **获取API访问权限**:首先,你需要注册并创建TestRail项目,并确保该项目启用了API访问。然后会获得一个API密钥,这是后续请求的基础。 2. **理解API文档**:查阅TestRail官方文档(https://docs.gurock.com/testrail-api2/start)了解API的各种端点,特别是与测试用例相关的部分,如`get_cases()`、`add_case()`等。 3. **设置HTTP请求**:通常需要使用HTTP客户端库,比如Python的requests库或者Postman,构建GET或POST请求到指定URL,附带API密钥作为认证信息。 4. **发送请求**:例如,你可以使用以下Python代码示例(假设已安装requests库): ```python import requests url = "https://your-testrail-url.com/index.php?/api/v2/" headers = { 'Authorization': 'Basic ' + your_api_key, 'Content-Type': 'application/json' } response = requests.get(url + 'cases', headers=headers) # 检查响应状态码 if response.status_code == 200: test_cases = response.json() # 处理返回的测试用例数据 else: print("Error:", response.text) ``` 5. **解析和处理数据**:将服务器返回的JSON数据转换为Python字典或列表,分析每个测试用例的相关属性,如ID、标题、描述等。 6. **保存或进一步处理**:可以根据需要将数据存储到数据库、CSV文件或其他地方,或者用于自动化脚本的进一步操作。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值