根据url 在ensembl 网站爬取外显子等数据

该博客介绍了如何利用Python编程从Ensembl网站上爬取基因(gene)和转录本(transcript)对应的外显子数据。通过读取csv文件中的基因ID和转录本ID,构造URL并利用`pd.read_html()`函数获取表格数据。如果网页中存在多个表格,需要指定索引来获取目标表格内容。爬取的数据包括插入'geneid'和'traid'列,并保存到CSV文件中。
摘要由CSDN通过智能技术生成

根据url 在ensembl 网站爬取外显子等数据
需要先一步准备好url,我准备的url如下:
主要是g 和 t 两列内容不同
在这里插入图片描述

可以准备好g和t两列数据,用python自动补充好url链接,代码如下:
(注意:url不要是列表的形式,否则会报错)

此时这个html页面只有一个表格,其他的内容没有,所以可以直接写
tb = pd.read_html(urlValue)

但是如果url里面,除了表格之外,还有其他的内容,则,需要在tb爬取的url后面标注爬取的表格的位置,如爬取第一个表格内容:
tb = pd.read_html(urlValue)[0]

import pandas as pd
import csv
with open('geneid.csv', encoding='utf-8') as file:
    f_csv = csv.reader(file)
    for i, rows in enumerate(f_csv):
        if i >= 1:
            print(rows)
            urls = ['https://nov2020.archive.ensembl.org/Mus_musculus/Component/Transcript/Exons/exons?db=core;'
                    'g={};t={}'.format(rows[0], rows[1])]
            for urlValue in urls:
                print(urlValue)
                df= pd.read_html(urlValue)
                
                print(df)
                col_name = df.columns.tolist()  # 将数据框的列名全部提取出来存放在列表里
                        # print(col_name)
                        col_name.insert(0, 'geneid')  # 在列索引为0的位置插入一列,列名为:geneid,刚插入时不会有值,整列都是NaN
                        col_name.insert(1, 'traid')
                        df = df.reindex(columns=col_name)  # DataFrame.reindex() 对原行/列索引重新构建索引值
                        df['geneid'] = rows[0]  # geneid列赋值
                        df['traid'] = rows[1]  # traid 列赋值

                        # print(df['No.'])

                        df.to_csv(path, mode='a', encoding='utf_8', index=False,header=False)
                        print(str(urlValue) + '抓取完成')
                		df = pd.DataFrame(tb)
                		df.to_csv(r'58748-18094(2).csv', mode='a', encoding='utf_8', index=False)
                		print(str(urlValue) + '抓取完成')

也可以手动整理好url,直接拿来使用即可,但相对比较麻烦些

在这里插入图片描述
代码为:边爬取边存入表格

import pandas as pd
import csv
with open('C:/Users/Desktop/50.csv', encoding='utf-8') as file:
    f_csv = csv.reader(file)
    for i, rows in enumerate(f_csv):
        if i >= 1:
            for j in rows:
                url = j
                print(url)
                tb = pd.read_html(url)[0]
                print(tb)
                df = pd.DataFrame(tb)
                df.to_csv(r'C:/Users//Desktop/58.csv', mode='a', encoding='utf_8', index=False)
                print(str(url) + '抓取完成')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值