google图片抓取

google图片是base64加密的,而且base64后的信息放在script信息里面

import pymysql
from lxml import etree
import logging
import requests
import time
import threading
from threading import RLock
import re
import os lock = RLock()
import base64
import ssl ssl._create_default_https_context = ssl._create_unverified_context # 添加日志 logging.basicConfig(
level=logging.INFO, # 定义输出到文件的log级别,大于此级别的都被输出
format='%(asctime)s %(filename)s %(levelname)s : %(message)s', # 定义输出log的格式
datefmt='%Y-%m-%d %H:%M:%S', # 时间
filename='drugimagesError.log', # log文件名
filemode='a') # 写入模式“w”或“a” class google_images(object): def __init__(self):
self.strat_record = 1
self.end_record = 10000001
self.db = pymysql.connect(host='localhost', port=3306, database='yao_zhi', user='root', password='root',
charset='utf8')
self.cursor = self.db.cursor()
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"} while True:
self.parse_page() def parse_page(self):
lock.acquire()
num = self.cursor.execute(
"select id, me_pizhunwenhao, me_name, me_jixing, me_key from guo_cai_jin_kou_yao_pin where id > {} limit 1000".format(
self.strat_record))
lock.release()
if str(num) == str(0):
exit() data_tuple = self.cursor.fetchall()
threading_list = []
for data_one in data_tuple:
id = data_one[0]
approvalNumber = data_one[1]
drugName = data_one[2]
dosageForm = data_one[3]
try:
specifications = re.findall(r".+?,", data_one[4])[0]
except:
specifications = data_one[4]
self.strat_record = id
logging.info("id:%s approvalNumber:%s drugName:%s dosageForm:%s specifications:%s" % (
id, approvalNumber, drugName, dosageForm, specifications))
print("id:%s approvalNumber:%s drugName:%s dosageForm:%s specifications:%s" % (
id, approvalNumber, drugName, dosageForm, specifications)) if str(id) == str(self.end_record):
exit()
lock.acquire()
num = self.cursor.execute("select id from drugimages where approvalNumber = '{}' ".format(approvalNumber))
lock.release()
if not num:
t = threading.Thread(target=self.parse_page_data,
args=(id, approvalNumber, drugName, dosageForm, specifications,))
t.start()
threading_list.append(t)
time.sleep(3) for t_one in threading_list:
t_one.join() def parse_page_data(self, id, approvalNumber, drugName, dosageForm, specifications):
print("id:%s approvalNumber:%s drugName:%s specifications:%s" % (
id, approvalNumber, drugName, specifications))
keyword = drugName + ' ' + dosageForm + ' ' + specifications
url = 'https://www.google.com/search?biw=1920&bih=900&tbm=isch&q=%s' % keyword
print(url)
data_particular = etree.HTML(requests.get(url=url, headers=self.headers).content)
images_list = data_particular.xpath('//span[@id="xjs"]/script/text()')[0]
images_list_link = re.findall(r'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD.*"\]?', images_list) num = 0
for link in images_list_link:
num += 1
url_link = link.replace('"]', '')
image = url_link.encode('utf-8').decode('unicode_escape')
image_data = image.replace('data:image/jpeg;base64,', '')
drugsql = "insert into drugimages(approvalNumber, drugName, specifications, image, num, durgid) values('{}', '{}', '{}', '{}', {}, {})"
drugsql_data = drugsql.format(approvalNumber, drugName, specifications, image, int(num), int(id))
print('sql_data:%s' % drugsql_data)
logging.info("id:%s approvalNumber:%s drugName:%s specifications:%s" % (
id, approvalNumber, drugName, specifications))
lock.acquire()
self.cursor.execute(drugsql_data)
self.db.commit()
lock.release()
pic_content = base64.b64decode(image_data)
page_id = int(id / 1000)
file = './images/' + 'page' + str(page_id) + '/'
if not os.path.exists(file):
os.makedirs(file)
files = file + 'id' + str(id) + '/'
if not os.path.exists(files):
os.makedirs(files)
file = open(files + str(approvalNumber) + '-' + str(num) + '.jpg', 'wb')
file.write(pic_content)
file.close()
if str(num) == str(30):
break if __name__ == '__main__':
google_images()

  

google image的更多相关文章

  1. Linux 利用Google Authenticator实现ssh登录双因素认证

    1.介绍 双因素认证:双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起才能发挥作用的身份认证系统.双因素认证是一种采用时间同步技术的系统,采用了基于时间.事件和密钥三变量而产生的一 ...

  2. linux上使用google身份验证器(简版)

    系统:centos6.6 下载google身份验证包google-authenticator-master(其实只是一个.zip文件,在windwos下解压,然后传进linux) #cd /data/ ...

  3. Google软件构建工具Bazel原理及使用方法介绍

    近期,Google开源了强大的自动化构建工具Bazel. 正好博主近期在使用china版的Bazel--腾讯自主开发的Blade,所以准备跟大家分享一下Google Bazel这个分布式构建系统的原理 ...

  4. Google Java编程库Guava介绍

    本系列想介绍下Java下开源的优秀编程库--Guava[ˈgwɑːvə].它包含了Google在Java项目中使用一些核心库,包含集合(Collections),缓存(Caching),并发编程库(C ...

  5. 序列化笔记之一:Google的Protocol Buffer格式分析

    从公开介绍来看,ProtocolBuffer(PB)是google 的一种数据交换的格式,它独立于语言,独立于平台.作为一个学了多年通信的人,ProtocolBuffer在我看来是一种信源编码.所谓信 ...

  6. [异常解决] How make ubuntu use Google Search

    1.Download the hosts file fromhttps://laod.cn/hosts/2016-google-hosts.html [1] 2.Write a bash shell ...

  7. Google翻译之路

    如何将整个网站都翻译成某种语言,想必大家都有碰到这样的问题吧. 如果能够访问Google的话, 那这个太容易不过了. 来看,下面的就是Google提供的直接翻译某个网站. http://transla ...

  8. 使用google 语言 api 来实现整个网站的翻译

    ---恢复内容开始--- 使用google 语言 api 来实现整个网站的翻译,这时我们可以利用免费的google api来做处理来实现多语言的功能. 放在 HTML 文件中 <div id=& ...

  9. [转载]Google Guava官方教程(中文版)

      原文链接  译文链接 译者: 沈义扬,罗立树,何一昕,武祖  校对:方腾飞 引言 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] ...

  10. fir.im Weekly - 聊聊 Google 开发者大会

    中国互联网的三大错觉:索尼倒闭,诺基亚崛起,谷歌重返中国.12月8日,2016 Google 开发者大会正式发布了Google Developers 中国网站 ,包含了Android Develope ...

随机推荐

  1. 《Linux 性能及调优指南》写在后面的话

    感谢飞哥的翻译. 目前飞哥 (http://hi.baidu.com/imlidapeng)的网址已经不能访问了. <Linux 性能及调优指南>这本书的原文地址:http://www.r ...

  2. es6基础(2)--解构赋值

    //解构赋值 { let a,b,rest; [a,b]=[1,2]; console.log(a,b); } //数组解构赋值 { let a,b,rest; [a,b,...rest]=[1,2, ...

  3. MongoDB Shell 常用操作命令

    MonoDB   shell命令操作语法和JavaScript很类似,其实控制台底层的查询语句都是用javascript脚本完成操作的. Ø 数据库 1.Help查看命令提示 help db.help ...

  4. 【死磕 Spring】—— IoC 之深入理解 Spring IoC

    本文主要基于 Spring 5.0.6.RELEASE 摘要: 原创出处 http://svip.iocoder.cn/Spring/IoC-intro/ 在一开始学习 Spring 的时候,我们就接 ...

  5. 带约束的粒子群优化算法C++实现

    2018年1月份给师姐做的一个小项目,本来不打算写的,因为论文还没发表,涉及查重等乱七八糟的问题.... 感觉现在不写,以后应该来不及了,因为已经在实习岗位了.... 不做过多介绍,只做大概的描述,我 ...

  6. linux的系统调优

    例1:找出前当系统中,CPU负载过高的服务器? 服务器1: load average: 0.15, 0.08, 0.01 1核 服务器2: load average: 4.15, 6.08, 6.01 ...

  7. [UGUI]图文混排(四):插入图片

    参考链接: http://www.cnblogs.com/leoin2012/p/7162099.html 0.图片标签和图片类 标签格式:<icon name=*** w=1 h=1 n=** ...

  8. 网络表示学习Network Representation Learning/Embedding

    网络表示学习相关资料 网络表示学习(network representation learning,NRL),也被称为图嵌入方法(graph embedding method,GEM)是这两年兴起的工 ...

  9. 34. Win7_x64安装oracle11g出现DIM-00019

    Win7_x64安装oracle11g出现如下异常处理方式 DIM-00019:创建服务时出错. O/S-ERROR:(OS 1726)远程过程调用失败. 点击弹出的错误框上的确定按钮后,继续弹出错误 ...

  10. django的i18n是如何实现的

    在程序中出现 _的地方会调用gettext_lazy(django.utils.translation.py) class LogEntry(models.Model): action_time = ...