网页中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]: