这个是帮朋友做的,难点就是他们有一个反爬虫机制,用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. 如何用npm安装vue

    下载安装node.js,安装完毕做好配置后开始运行. 如果npm版本太低,需要升级一下npm # 查看版本 $ npm -v #升级 npm cnpm install npm -g 安装vue-cli ...

  2. preparedStatement平台:

    public class cs{ public static void main(String[] args){ try{ class.forName("com.mysql.jdbc.Dri ...

  3. 【前端分享】jQuery.lazyload详解(转)

    jQuery实现图片延迟加载,不知道是否可以节省带宽呢?有人知道吗?这究竟只是一个视觉特效还是真的能延迟加载减少服务器的请求呢? <script type="text/javascri ...

  4. H3C三层交换机S5500初始配置+网络访问策略

    DHCP中继配置命令 dhcp relay address-check enable 命令用来使能DHCP 中继的地址匹配检查功能. undo dhcp relay address-check ena ...

  5. velocity.ui2.0所有的内置动画名称

    velocity升级到2.0后api发生了变化,按照原来的名称已经不能调用原来的动画效果,新的名称如下:velocity.ui2.0所有的内置动画名称 bounce flash headShake j ...

  6. python笔记4----字典

    1.哈希: 输入任意长度,输出固定长度. 即判断是否哈希,即判断可不可变. 2.创建字典 (1)直接创建:dic={1:'a',2:'b',3:'c'} (2)dict函数创建: list=[(1,' ...

  7. [洛谷 P1967] 货车运输 (最大生成树 lca)

    题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...

  8. Spring MVC 的概念1

    ---恢复内容开始--- SpringMVC是一个采用模型----视图------控制器(MVC)的WEb框架建立在中央前端控制器的 Servlet(DispatcherServlet),他负责发送每 ...

  9. django模板使用

    概述 模板由两部分组成,HTML代码,逻辑控制代码,作用:快速生成HTML页面,优点:模板的设计实现了业务逻辑与现实内容的分离 定义模板 挖坑与继承 模板继承可以减少页面的内容的重复定义,实现页面的重 ...

  10. omap 移植qt4.7.0

    准备: 1.Qt源码包 qt-everywhere-opensource-src-4.7.0.tar.gz 2.交叉编译器 arm-eabi-4.4.0.tar.bz2 3.触摸屏校验工具:tslib ...