爬虫—启新宝接口函数

from selenium import webdriver
import time
import re
from bs4 import BeautifulSoup

#************************************************************************
#定义login函数
def login(username,password):
driver = webdriver.Firefox(executable_path=‘C:/Program Files (x86)/Mozilla Firefox/firefox.exe‘)
driver.get(‘http://www.qixin.com/login‘)
time.sleep(2)
driver.maximize_window()
driver.find_element_by_link_text(‘QQ登录‘).click()
driver.switch_to_frame(‘ptlogin_iframe‘)#切换到iframe框架
driver.find_element_by_link_text(‘帐号密码登录‘).click()
driver.find_element_by_id(‘u‘).clear()
driver.find_element_by_id(‘u‘).send_keys(username)#需要更换的QQ账号
driver.find_element_by_id(‘p‘).send_keys(password)#对应QQ账号的密码密码
driver.find_element_by_class_name(‘login_button‘).click()
time.sleep(5)
return driver
#************************************************************************
#获得搜索结果页面
def search_ename(driver,i):
#搜索企业名称并抓取该url地址
url = ‘http://www.qixin.com/search?key=‘+i+‘&type=enterprise&method=all‘
print(‘正在抓取:‘+url)
driver.get(url)
return driver
#************************************************************************
#从搜索结果中提取出企业链接(只提取第一个)
def get_enameurl(driver):
#利用BeautifulSoup匹配公司名
soup = BeautifulSoup(driver.page_source)
sfa = soup.find_all(href=re.compile(‘/company/gongsi‘))
if len(sfa)!=0:
eurl = ‘http://www.qixin.com‘+sfa[0][‘href‘]
else:
eurl = ‘不存在‘
return eurl
#************************************************************************
#定义匹配基本信息函数
def get_basic_info(soup):
#匹配工商基本信息########################
a = soup.find_all(class_="panel panel-default basic-info")
#s用来存储企业工商基本信息
s = ‘‘
#将工商基本信息中各个字段的值匹配出来存储进s
for i in a[0].find_all(‘span‘)[1:]:
s = s+‘\t‘+i.string

#因为法人代表字段是链接,所以不能用以上方式匹配,下面是匹配法人代表的方式
#判断法人代表字段是否为空,不为空执行以下操作
if len(soup.find_all(href=re.compile(‘search‘)))!=0:
#匹配法人代表的值
faren = soup.find_all(href=re.compile(‘search‘))[0].string
#判断法人代表的值类型是否是str(不是str就是NoneType类型,无法与s进行相加)
if isinstance(faren,str):
s = faren + s
else:
s = ‘-‘ + s
#法人代表字段如果为空,执行以下操作
else:
faren = ‘-‘
s = fanren + s
#将企业名称存储进s(首先判断企业名称是否为空)
try:
qiyemingcheng = soup.title.string.split(‘|‘)[0]
except:
qiyemingcheng = ‘-‘

s = qiyemingcheng + ‘\t‘ + s +‘\n‘

#匹配股东信息和主要人员信息
a = soup.find_all(class_=‘panel panel-default‘,style="margin-top:0")
#匹配股东信息########################
#不是链接的股东信息
gudonglist = a[0].find_all(‘span‘,class_=None)
if len(gudonglist)!=0:
for gudong in gudonglist:
s = s+gudong.string+‘\t‘
#是链接的股东信息
gudonglist2 = a[0].find_all(‘a‘)
if len(gudonglist2)!=0:
for gudong in gudonglist2:
s=s+gudong.string+‘\t‘

if len(gudonglist)==0 and len(gudonglist2)==0:
s=s+‘-‘
s=s+‘\n‘
#匹配主要人员信息########################
bosslist = a[1].find_all(class_=‘enterprise-employee-name‘)
if len(bosslist)!=0:
for boss in bosslist:
s=s+boss.string+‘\t‘
else:
s=s+‘-‘
s=s+‘\n‘
#将s写入文本文件
print(‘成功写入基本信息数据\n**************\n‘)
return s
#************************************************************************
#定义匹配风险信息函数
def get_risk_info(soup):
a=soup.find_all(class_="risk-list-item")
s=‘‘
#匹配工商变更信息########################
changerecord = soup.find(id="changerecord").find_all(class_=‘risk-list-item‘)
if len(changerecord)!=0:
for i in changerecord:
cr = i.get_text()
cr = cr.replace(‘\n‘,‘‘)
cr = cr.replace(‘\r‘,‘‘)
s=s+cr+‘\t‘
else:
s=s+‘-‘
s=s+‘\n‘
#匹配法院判决信息########################
lawsuit = soup.find(id="lawsuit").find_all(class_=‘risk-list-item‘)
if len(lawsuit)!=0:
for i in lawsuit:
ls = i.get_text()
ls = ls.replace(‘\n‘,‘‘)
ls = ls.replace(‘\r‘,‘‘)
s=s+ls+‘\t‘
else:
s=s+‘-‘
s=s+‘\n‘
#匹配法院公告信息########################
notice = soup.find(id="notice").find_all(class_=‘risk-list-item‘)
if len(notice)!=0:
for i in notice:
nt = i.get_text()
nt = nt.replace(‘\n‘,‘‘)
nt = nt.replace(‘\r‘,‘‘)
s=s+nt+‘\t‘
else:
s=s+‘-‘
s=s+‘\n‘
#匹配被执行人信息########################
executionperson = soup.find(id="executionperson").find_all(class_=‘risk-list-item‘)
if len(executionperson)!=0:
for i in executionperson:
ep = i.get_text()
ep = ep.replace(‘\n‘,‘‘)
ep = ep.replace(‘\r‘,‘‘)
s=s+ep+‘\t‘
else:
s=s+‘-‘
s=s+‘\n‘
#匹配失信人信息########################
dishonest = soup.find(id="dishonest").find_all(class_=‘risk-list-item‘)
if len(dishonest)!=0:
for i in dishonest:
ds = i.get_text()
ds = ds.replace(‘\n‘,‘‘)
ds = ds.replace(‘\r‘,‘‘)
s=s+ds+‘\t‘
else:
s=s+‘-‘
s=s+‘\n‘
#匹配司法拍卖信息########################
sfpm = soup.find(id="sfpm").find_all(class_=‘risk-list-item‘)
if len(sfpm)!=0:
for i in sfpm:
sf = i.get_text()
sf = sf.replace(‘\n‘,‘‘)
sf = sf.replace(‘\r‘,‘‘)
s=s+sf+‘\t‘
else:
s=s+‘-‘
s=s+‘\n‘
#匹配经营异常信息########################
abnormal = soup.find(id="abnormal").find_all(class_=‘risk-list-item‘)
if len(abnormal)!=0:
for i in abnormal:
ab = i.get_text()
ab = ab.replace(‘\n‘,‘‘)
ab = ab.replace(‘\r‘,‘‘)
s=s+ab+‘\t‘
else:
s=s+‘-‘
s=s+‘\n‘
#将s写入文本文件
print(‘成功写入风险信息数据\n**************\n‘)
return s
#************************************************************************
#定义匹配对外投资函数
def get_investment_info(soup):
a = soup.find_all(class_="search-result-title" )
s=‘‘
if len(a)!=0:
for i in a:
s=s+i.get_text()+‘\t‘
else:
s=s+‘-‘
s=s+‘\n‘
#将s写入文本文件
print(‘成功写入对外投资数据\n**************\n‘)
return s
#************************************************************************
#定义匹配企业年报函数
def get_report_info(soup):
s=‘‘
#匹配企业基本信息########################
a=soup.find(class_="panel-body report-info info-part")
info = a.find_all(‘span‘)
for i in info:
infovalue = i.get_text()
if infovalue==‘‘:
infovalue=‘-‘
s=s+infovalue+‘\t‘
s=s+‘\n‘

#匹配企业资产状况信息########################
a = soup.find(class_="table table-bordered table-striped",style="margin-top:10px;")
companyfinance = a.find_all(‘td‘)
for i in companyfinance:
cfvalue = i.get_text()
if cfvalue==‘‘:
cfvalue=‘-‘
s=s+cfvalue+‘\t‘
s=s+‘\n\n‘
#将s写入文本文件
print(‘成功写入企业年报数据\n**************\n‘)
return s
#************************************************************************
#抓取企业链接(eurl)关联的网页,匹配出需要的字段,并写入文本文件
def get_evalue(driver,eurl):
s=‘‘
#抓取企业链接
print(‘正在抓取‘+eurl)
driver.get(eurl)

#将页面源码与BeautifulSoup关联
soup = BeautifulSoup(driver.page_source)

#抓取基本信息
s = s + get_basic_info(soup)

#抓取风险信息,首先点击切换到风险信息栏
try:
driver.find_element_by_xpath("//a[@href=‘#risk‘]").click()
time.sleep(1)
soup = BeautifulSoup(driver.page_source)
s = s + get_risk_info(soup)
except:
s = s + ‘-\n-\n-\n-\n-\n-\n-\n‘

#抓取对外投资信息,首先点击切换到对外投资信息栏
try:
driver.find_element_by_xpath("//a[@href=‘#investment‘]").click()
time.sleep(1)
soup = BeautifulSoup(driver.page_source)
s = s + get_investment_info(soup)
except:
s = s + ‘-\n‘

#抓取企业年报信息,首先点击切换到企业年报信息栏
try:
driver.find_element_by_xpath("//a[@href=‘#report‘]").click()
time.sleep(1)
soup = BeautifulSoup(driver.page_source)
s = s + get_report_info(soup)
except:
s = s + ‘-\n-\n\n‘

return s
#************************************************************************
def get_enterprise_data(driver,ename):
#获得搜索结果页面
driver = search_ename(driver,ename)
#从搜索结果中提取出企业链接
eurl = get_enameurl(driver)
#抓取企业链接(eurl)关联的网页,匹配出需要的字段
if eurl != ‘不存在‘:
data = get_evalue(driver,eurl)
else:
soup = BeautifulSoup(driver.page_source)
try:
qiyemingcheng = soup.title.string.split(‘|‘)[0]
except:
qiyemingcheng = ‘-‘

data = qiyemingcheng+‘,‘+‘该企业不存在\n\n‘
print(‘成功写入数据\n**************\n‘)
sdata = data.split(‘\n‘)
endata = sdata[0].split(‘\t‘)

return endata
#************************************************************************

driver = login(‘QQ账号‘,‘QQ密码‘) #登录函数 只需要登录一次
data = get_enterprise_data(driver,‘企业名称‘) #获得企业信息函数,登录之后可以多次调用

时间: 2024-11-06 03:47:30

爬虫—启新宝接口函数的相关文章

COM接口函数通用Hook方法

本文是我的本科学位论文, 今发表在此, 以示原创之据 第1章 绪论 研究背景 研究意义 相关技术简介 COM概述 COM内存模型描述及C语言和C++语言实现 调用约定 Hook API原理 Windows钩子原理及进程注入 开发及调试环境 第2章 问题抽象及关键技术研究 实验01:通过调试器查看C++类的虚函数表 实验02:通过函数指针调用C++虚函数 实验03:交换两个相同C++类的虚函数表 实验04-1:替换C++虚函数表中的虚函数(__thiscall)地址 实验04-2:替换C++虚函数

通过淘宝接口获取淘宝全部商品目录实例

最近项目需要,要获取淘宝商品全部类目结构,有两种方法,1. 可以通过爬虫技术实现, 2. 通过淘宝开放接口实现. 这里选用第2种方法,以下是实现过程: 1. 首先要申请成为淘宝开发者 http://open.taobao.com/index.htm 2. 进入后台后,新建一个应用,得到一个app证书,证书里面有Appkey 和 Appsecret (Appsecret为 API 调用的密钥要注意保密,如泄漏要及时重置) 3. 调用淘宝接口还需要一个 sissionid,通过以下方式得到, 访问U

Oracle官网JNI简介和接口函数分析

第一章 概述 本章主要介绍JNI(Java Native Interface),JNI是一种本地编程接口.它允许运行在JAVA虚拟机中的JAVA代码和用其他编程语言,诸如C语言.C++.汇编,写的应用和库之间的交互操作. JNI的最大优势在于没有强加任何限制在JAVA虚拟机的下层实现上,因此,JAVA虚拟机供应商能够提供JNI的支持而不影响虚拟机的其他部分,程序员只需写出一个版本的本地应用和库,就可使之运行在一切支持JNI的JAVA虚拟机上. 本章包含了以下的要点: ? JNI概述 ? 目标 ?

Linux操作系统中的系统调用接口函数

在分析病毒样本时发现有些系统函数是必用,有些超常用,现在都列出来,希望和大家交流 转载请注明出处:http://blog.csdn.net/u010484477     O(∩_∩)O谢谢 进程控制 fork 创建一个新进程 clone 按指定条件创建子进程 execve 运行可执行文件 exit 中止进程 _exit 立即中止当前进程 getdtablesize 进程所能打开的最大文件数 getpgid 获取指定进程组标识号 setpgid 设置指定进程组标志号 getpgrp 获取当前进程组

调用淘宝接口有每IP数量/时间限制-负载均衡解决

其实标题不太准确,不过原理是一样. 这里要解决的问题是:调用淘宝接口有每IP数量/时间限制,但是我们的调用量较大,有可能超过这个限制,从而导致可能被淘宝屏蔽一小段时间.为了解决这个问题,我们需要用多个公网ip去掉接口.而实现这一点的最好地方就是在路由器这一级别. 简要做法如下: 1)做一台linux路由器,它负责接受内网对淘宝的调用请求,然后平均分发到多个公网接口.具体是两个步骤:a)使用iptables标记(FWMARK)数据包:b)然后根据这个标记匹配不同的策略路由来分发到不同网卡接口. 2

支付宝集分宝接口开发的相关问题解答

上周做了个后台自动派发集分宝的功能,折腾了三天才搞定,其实主要是支付宝的自己问题 支付宝应用沙箱的私钥其实是经过 PKCS8 编码过的,导致PHP根本无法使用, openssl_get_privatekey 方法直接就报错了,无效的私钥格式 Warning: openssl_sign(): supplied key param cannot be coerced into a private key 我一开始以为是配置问题,但本地和服务器都已安装并开启 openssl ,在网上搜索了半天没搞定

Linux时间子系统(三) 用户空间接口函数

一.前言 从应用程序的角度看,内核需要提供的和时间相关的服务有三种: 1.和系统时间相关的服务.例如,在向数据库写入一条记录的时候,需要记录操作时间(何年何月何日何时). 2.让进程睡眠一段时间 3.和timer相关的服务.在一段指定的时间过去后,kernel要alert用户进程 本文主要描述和时间子系统相关的用户空间接口函数知识. 二.和系统时间相关的服务 1.秒级别的时间函数:time和stime time和stime函数的定义如下: #include <time.h> time_t ti

ES6新特性(函数默认参数,箭头函数)

ES6新特性之 函数参数的默认值写法 和 箭头函数. 1.函数参数的默认值 ES5中不能直接为函数的参数指定默认值,只能通过以下的变通方式:   从上面的代码可以看出存在一个问题,当传入的参数为0或者false时,会直接取到后面的值,而不是传入的这个参数值. 那怎么解决呢?对于上图的代码,可以通过判断是否传入了num参数,没有就用默认值:   这种做法还是很麻烦的,而ES6则直接在参数定义里面设置函数参数的默认值,而且不用担心传入参数是0或者false会出错了: 2.箭头函数 箭头函数用 =>

第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all; Select 列 into 新表;字符串函数;日期函数

第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all;  Select 列 into 新表;字符串函数;日期函数 SQL聚合函数 MAX(最大值).MIN(最小值).AVG(平均值).SUM(和).COUNT(数量:记录的条数) 聚合函数对null不计算.如果一行数据都是null,count(*)包含对空值行.重复行的统计. --聚合函数演示 selec