首页 > 解决方案 > 用 Python 从网站编写多个文件

问题描述

import pandas as pd
import requests
from bs4 import BeautifulSoup

df = pd.read_csv('env_sequences.csv')

Namedf = df['Name']
Uniprotdf = df['ID']



for row in Uniprotdf:

    theurl = 'https://www.uniprot.org/uniprot/' + row + '.fasta'
    page = requests.get(theurl).content



    for row in Namedf:
        fasta = open(row + '.txt', 'w')
        fasta.write(page)
        fasta.close()

#Sample website: https://www.uniprot.org/uniprot/P04578.fasta

我有一个 .csv 文件,我使用“ID”列生成指向要从中下载内容的网站的链接,并将其保存为同一 .csv 中“名称”列中的相应名称。

代码在第二个 for 循环后停止工作,在该循环中我尝试在 fasta.write() 函数中使用 page 变量时出现 TypeError。然而,如果我 print(page) 我能够输出我希望在每个文件中拥有的文本。这是我必须将 html 转换为字符串的情况吗?我不确定如何从这里开始。

标签: pythonpython-3.xpandas

解决方案


对于给定的url,如果您打印页面的内容,您会注意到它有 ' b'' 表示它的binary格式。

 print (page)
b'>sp|P04578|ENV_HV1H2 Envelope glycoprotein gp160 OS=Human immunodeficiency virus type 1 group M subtype B (isolate HXB2) OX=11706 GN=env PE=1 SV=2\nMRVKEKYQHLWRWGWRWGTMLLGMLMICSATEKLWVTVYYGVPVWKEATTTLFCASDAKA\nYDTEVHNVWATHACVPTDPNPQEVVLVNVTENFNMWKNDMVEQMHEDIISLWDQSLKPCV\nKLTPLCVSLKCTDLKNDTNTNSSSGRMIMEKGEIKNCSFNISTSIRGKVQKEYAFFYKLD\nIIPIDNDTTSYKLTSCNTSVITQACPKVSFEPIPIHYCAPAGFAILKCNNKTFNGTGPCT\nNVSTVQCTHGIRPVVSTQLLLNGSLAEEEVVIRSVNFTDNAKTIIVQLNTSVEINCTRPN\nNNTRKRIRIQRGPGRAFVTIGKIGNMRQAHCNISRAKWNNTLKQIASKLREQFGNNKTII\nFKQSSGGDPEIVTHSFNCGGEFFYCNSTQLFNSTWFNSTWSTEGSNNTEGSDTITLPCRI\nKQIINMWQKVGKAMYAPPISGQIRCSSNITGLLLTRDGGNSNNESEIFRPGGGDMRDNWR\nSELYKYKVVKIEPLGVAPTKAKRRVVQREKRAVGIGALFLGFLGAAGSTMGAASMTLTVQ\nARQLLSGIVQQQNNLLRAIEAQQHLLQLTVWGIKQLQARILAVERYLKDQQLLGIWGCSG\nKLICTTAVPWNASWSNKSLEQIWNHTTWMEWDREINNYTSLIHSLIEESQNQQEKNEQEL\nLELDKWASLWNWFNITNWLWYIKLFIMIVGGLVGLRIVFAVLSIVNRVRQGYSPLSFQTH\nLPTPRGPDRPEGIEEEGGERDRDRSIRLVNGSLALIWDDLRSLCLFSYHRLRDLLLIVTR\nIVELLGRRGWEALKYWWNLLQYWSQELKNSAVSLLNATAIAVAEGTDRVIEVVQGACRAI\nRHIPRRIRQGLERILL\n'

打开文件时将 ' '更改为 ' w'wb应该可以修复它。此外, usingwith open ()是处理文件的更 Pythonic 方式。

for row in Namedf:
    with open ('url.txt','wb') as fasta:
        file.write(page)

推荐阅读