这个是帮朋友做的,难点就是他们有一个反爬虫机制,用request一直不行,后面我就用selenium直接把网页copy下来,然后再来解析本地的html文件,就木有问题啦。

现在看来,写得有点傻,多包涵。

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

import os
import time
import datetime
import codecs
from lxml import etree
from selenium import webdriver
import csv
#控制编码,全英文网页,用不着
# import sys
# reload(sys)
# sys.setdefaultencoding('utf-8') # # date格式转为string格式
today = datetime.date.today()
today_string = today.strftime('%Y-%m-%d') #通过浏览器得到网页页面--反反爬虫
def html_getter(site,file_name):
driver = webdriver.Firefox()
# chromedriver = r'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'
# os.environ['webdriver.chrome.driver'] = chromedriver
# driver = webdriver.Chrome(chromedriver)
driver.get(site)
driver.maximize_window() # 将浏览器最大化显示
time.sleep(5) # 控制间隔时间,等待浏览器反映
# 保存页面
source_code = driver.find_element_by_xpath("//*").get_attribute("outerHTML")
f = codecs.open(file_name, 'w+', 'utf8')
f.write(source_code)
f.close() #打开保存在本地的html文件
def file_html(file_name):
f = open(file_name,'r')
html = f.read()
f.close()
return html #写入csv,也可以有其他写入方式,这个地方就csv啦
def csv_writer(ll):
headers = ['drug','inter','snp_rs_id','Allele_name','Defining_change','Adverse_Reaction','ref','href','original_title']
with open('drugbank.csv','a') as f:
f_csv = csv.writer(f)
f_csv.writerow(headers)
f_csv.writerows(ll) #用xpath解析网页,得到表格数据,我就是这么爱xpath,不喜欢正则表达式
def data_get(html):
selector = etree.HTML(html)
tbody=selector.xpath('/html/body/main/table/tbody/tr')
for each in tbody:
# #1.'drug'
drug_name=each.xpath('td[1]/strong/text()')[0]
drug_sn=each.xpath('td[1]/a/text()')[0]
drug=drug_name+' '+drug_sn
# #print(drug)
# #2.'Interacting Gene/Enzyme'
int=each.xpath('td[2]')[0]
inter=int.xpath('string(.)')
# print(inter)
# #3.'SNP RS ID'
snp=each.xpath('td[3]/a/text()')
if snp:
snp_rs_id=snp[0]
else:
snp_rs_id='Not Available '
#print snp_rs_id
#4.Allele name
Allele=each.xpath('td[4]/text()')
if Allele:
Allele_name=Allele[0]
else:
Allele_name='Not Available '
# #print Allele_name
# #5.'Defining change'
Defining=each.xpath('td[5]/text()')
if Defining:
Defining_change=Defining[0]
else:
Defining_change='Not Available '
# print Defining_change
# 6.'Adverse Reaction'
Adverse=each.xpath('td[6]/text()')
if Adverse:
Adverse_Reaction=Adverse[0]
else:
Adverse_Reaction='Not Available '
# print Adverse_Reaction
#7.'Reference(s)'
ref=each.xpath('td[7]/span/a/text()')[0]
href=each.xpath('td[7]/span/a/@href')[0]
original_title=each.xpath('td[7]/span/a/@data-original-title')[0]
# print ref
# print(href)
# print(original_title) tt=(drug,inter,snp_rs_id,Allele_name,Defining_change,Adverse_Reaction,ref,href,original_title)
ll.append(tt) #print ll if __name__ == '__main__':
ll=[]
for i in range(1,5):
page_num=i
site='http://www.drugbank.ca/genobrowse/snp-adr?page='+str(page_num)
#get the html through webdriver
file_name=unicode(today_string)+u'drugbank_'+unicode(str(page_num))+u'.html' html_getter(site,file_name)
html=file_html(file_name)
data_get(html)
csv_writer(ll)

python爬虫:爬取医药数据库drugbank的更多相关文章

  1. python爬虫——爬取NUS-WIDE数据库图片

    实验室需要NUS-WIDE数据库中的原图,数据集的地址为http://lms.comp.nus.edu.sg/research/NUS-WIDE.htm   由于这个数据只给了每个图片的URL,所以需 ...

  2. Python爬虫 - 爬取百度html代码前200行

    Python爬虫 - 爬取百度html代码前200行 - 改进版,  增加了对字符串的.strip()处理 源代码如下: # 改进版, 增加了 .strip()方法的使用 # coding=utf-8 ...

  3. 用Python爬虫爬取广州大学教务系统的成绩(内网访问)

    用Python爬虫爬取广州大学教务系统的成绩(内网访问) 在进行爬取前,首先要了解: 1.什么是CSS选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code ...

  4. 使用Python爬虫爬取网络美女图片

    代码地址如下:http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip install ...

  5. Python爬虫|爬取喜马拉雅音频

    "GOOD Python爬虫|爬取喜马拉雅音频 喜马拉雅是知名的专业的音频分享平台,用户规模突破4.8亿,汇集了有声小说,有声读物,儿童睡前故事,相声小品等数亿条音频,成为国内发展最快.规模 ...

  6. python爬虫爬取内容中,-xa0,-u3000的含义

    python爬虫爬取内容中,-xa0,-u3000的含义 - CSDN博客 https://blog.csdn.net/aiwuzhi12/article/details/54866310

  7. Python爬虫爬取全书网小说,程序源码+程序详细分析

    Python爬虫爬取全书网小说教程 第一步:打开谷歌浏览器,搜索全书网,然后再点击你想下载的小说,进入图一页面后点击F12选择Network,如果没有内容按F5刷新一下 点击Network之后出现如下 ...

  8. python爬虫—爬取英文名以及正则表达式的介绍

    python爬虫—爬取英文名以及正则表达式的介绍 爬取英文名: 一.  爬虫模块详细设计 (1)整体思路 对于本次爬取英文名数据的爬虫实现,我的思路是先将A-Z所有英文名的连接爬取出来,保存在一个cs ...

  9. 一个简单的python爬虫,爬取知乎

    一个简单的python爬虫,爬取知乎 主要实现 爬取一个收藏夹 里 所有问题答案下的 图片 文字信息暂未收录,可自行实现,比图片更简单 具体代码里有详细注释,请自行阅读 项目源码: # -*- cod ...

随机推荐

  1. spring文件的上传和下载

    文件上传 文件上传需要用到两个类,MultipartFile和MultipartHttpServletRequest,它们都是在spring的web包中,同时需要在spring容器中配置Multipa ...

  2. 前端手机验证码cookie存储

    注册的时候经常会有手机验证码的输入这个环节,在第一次点击发送了验证码只后,比如倒计时只走了10秒钟,然后刷新的话,倒计时要还是存在的,这个时候就要有一个cookie的存在了. html的代码 < ...

  3. idea中SVN的运用

    1.1.1 上传代码时可以指定忽略一些上传目录 1.1.2 设置项目上传的路径 1.1.3 解决上传路径中包含“svn”目录问题 上传 从 SVN 服务器中检出代码到工作空间

  4. DB2高可用hadr搭建参数配置

    主机上执行db2 UPDATE DB CFG FOR XMHIS USING HADR_LOCAL_HOST 192.168.1.2db2 UPDATE DB CFG FOR XMHIS USING ...

  5. hibernate增删改查总结

    hibernate操作的都是基于对象的(曾save删delete改update) 进行hql查询是设置参数从零开始(session.setParameter(0,#)) hql查询设置参数可以是其他( ...

  6. [bzoj3743 Coci2015] Kamp(树形dp)

    传送门 Description 一颗树n个点,n-1条边,经过每条边都要花费一定的时间,任意两个点都是联通的. 有K个人(分布在K个不同的点)要集中到一个点举行聚会. 聚会结束后需要一辆车从举行聚会的 ...

  7. ZooKeeper概念

    这可能是把ZooKeeper概念讲的最清楚的一篇文章 相信大家对 ZooKeeper 应该不算陌生,但是你真的了解 ZooKeeper 是什么吗?如果别人/面试官让你讲讲 ZooKeeper 是什么, ...

  8. JAVA基础知识复习小结

    集合 Set集合 Set集合的基本特征是元素不允许重复.HashSet不保存元素顺序,LinkedHashSet用链表保持元素的插入顺序,TreeSet可定制排序规则. HashSet的底层是用Has ...

  9. python 中的一些小命令

  10. 0108MySQL集群搭建详解(三种结点分离)

    转自http://blog.csdn.net/yang1982_0907/article/details/20716845,感谢博主 本文将搭建一个最简化的MySQL Cluster系统,配置方法中的 ...