网页中flash数据抓取(千人基因组数据库中爬取CHB人群的等位基因频率信息解析)

优采云 发布时间: 2022-01-05 17:09

  网页中flash数据抓取(千人基因组数据库中爬取CHB人群的等位基因频率信息解析)

  该计划的目的:

  根据特定的SNP列表,从千基因组数据库中爬取CHB群体的等位基因频率信息,例如。

  因为网页是动态数据,内嵌了JavaScript代码,所以使用selenium来爬取信息。

  Beautiful Soup 是一个 Python 库,其主要功能是从网页中抓取数据。Beautiful Soup 提供了一些简单的、python 风格的函数来处理导航、搜索、修改分析树和其他功能。它是一个工具箱,为用户提供需要通过解析文档捕获的数据,避免复杂的正则表达式。

  准备:源代码

  # -*- coding:utf-8 -*-

from bs4 import BeautifulSoup

import time

from selenium import webdriver

from selenium.common.exceptions import NoSuchElementException

def get_allele_feq(browser, snp):

browser.get(

'https://www.ncbi.nlm.nih.gov/variation/tools/1000genomes/?q=%s' %snp) #Load page

# browser.implicitly_wait(60) #智能等待xx秒

time.sleep(30) #加载时间较长,等待加载完毕

# browser.find_element_by_css_selector("div[title=\"Han Chinese in Bejing, China\"]") #use selenium function to find elements

# 把selenium的webdriver调用page_source函数在传入BeautifulSoup中,就可以用BeautifulSoup解析网页了

bs = BeautifulSoup(browser.page_source, "lxml")

# bs.find_all("div", title="Han Chinese in Bejing, China")

try:

race = bs.find(string="CHB")

race_data = race.find_parent("div").find_parent(

"div").find_next_sibling("div")

# print race_data

race_feq = race_data.find("span", class_="gt-selected").find_all("li") # class_ 防止Python中类关键字重复,产生语法错误

base1_feq = race_feq[0].text #获取标签的内容

base2_feq = race_feq[1].text

return snp, base1_feq, base2_feq # T=0.1408 C=0.8592

except NoSuchElementException:

return "%s:can't find element" %snp

def main():

browser = webdriver.Chrome() # Get local session of chrome

fh = open("./4diseases_snps_1kCHB_allele_feq.list2", 'w')

snps = open("./4diseases_snps.list.uniq2",'r')

for line in snps:

snp = line.strip()

response = get_allele_feq(browser, snp)

time.sleep(1)

fh.write("\t".join(response)) #unicode 编码的对象写到文件中后相当于print效果

fh.write("\n")

print "\t".join(response)

time.sleep(1) # sleep a few seconds

fh.close()

browser.quit() # 退出并关闭窗口的每一个相关的驱动程序

if __name__ == '__main__':

main()

  参考资料:

  1]:#Beautiful Soup 4.4.0 文档

  2]:

  3]:

  4]:

  5]:

  6]:

  7]:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线