python requests post方式抓取公开数据-示例

问题场景

最近的项目需要抓取一些公开的网站数据,本文利用Python3下的requests方法举一个简单例子。

环境介绍

Windows
Python3.6
IDEA15
Chrome

目标

本文试图抓取一个公开网站下搜索到的数据:http://dbsearch.clinicalgenome.org/search/

这里写图片描述

思路

  1. 打开Chrome浏览器,输入网址
  2. 输入查询条件,并点击按钮
  3. 右键->检查->Elements->点击箭头选取一个数据,观察前台显示的数据在哪个标签层级下,方便后续清洗
  4. 右键->检查->Network 得到一些cookie等必备头部信息,作为参数
  5. 清洗request的payload信息,拼成json串
  6. 使用requests.post方法提交抓取源数据

关键步骤

3 右键->检查->Elements->点击箭头选取一个数据,观察前台显示的数据在哪个标签层级下,方便后续清洗

这里写图片描述

上图蓝色背景内的第二列是表格内的数据,也是我们要的数据

4 右键->检查->Network 得到一些cookie等必备头部信息

这里写图片描述

5 清洗request的payload信息,拼成json串

这里写图片描述

payload = {
‘GenomeBuild’: ‘hg19’,
‘Location’: ‘chrX:70367400-70384667’,
‘DirectView’: ‘View in …’,
‘Type’: ‘Any’,
‘Gender’: ‘Any’,
‘HPOTerm’: ”,
‘Task’: ‘Search ISCA Database’,
‘pheno_btn_style’: ”,
}

CODE

from bs4 import BeautifulSoup
import requests


def get_isca(url, headers, payload):
    page = requests.post(url, data=payload, headers=headers).text
    soup = BeautifulSoup(page, 'lxml')
    links = soup.select('td.results_2')
    i = 0
    for link in links:
        print(link.text)
        i += 1
        if (i % 8 == 0):
            print('================')

    links = soup.select('td.results_1')
    i = 0
    for link in links:
        print(link.text)
        i += 1
        if (i % 8 == 0):
            print('================')

if __name__ == '__main__':
    url = 'http://dbsearch.clinicalgenome.org/search/'
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Cookie': 'X-Mapping-eeipplmp=4DF199590E46B78FBFB31AEB1821707A',
        'Referer': 'http://dbsearch.clinicalgenome.org/search/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36'
    }
    payload = {
        'GenomeBuild': 'hg19',
        'Location': 'chrX:70367400-70384667',
        'DirectView': 'View in ...',
        'Type': 'Any',
        'Gender': 'Any',
        'HPOTerm': '',
        'Task': 'Search ISCA Database',
        'pheno_btn_style': '',
    }

    get_isca(url, headers, payload)

输出

这里写图片描述

可以看出包括Location列在内的数据都被抓到了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值