百度图片动态爬取3.0

之前我写过百度图片的1.0,2.0版本,代码在我的GitHub,以及简书上。在这里我就不对1.0,2.0版本的细节做过多的描述:
1.0:是基础版本:主要实现了图片的提取与下载
2.0:是对1.0的提升,主要有两方面的内容:
1. 代码函数化
2. 数据存储方式的变化

GitHub地址:https://github.com/RHobart/Web-Crawlers
简书地址:http://www.jianshu.com/p/567542a57af2

今天我在这里写的是关于3.0,这个3.0是对之前百度图片动态爬取的一优化;主要涉及异常处理,跟2.0版本的主要内容相差不大,代码如下:

#encoding="utf-8"
__author__='Hobart'

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup as bs
import urllib.request
import pymysql
import re
import os
import time 
#启动谷歌浏览器驱动
def start_brower(url):
    driver=webdriver.Chrome()
    driver.get(url)
    time.sleep(5)
    return driver
#动态获取图片信息
def get_img_information(location,last_location,count,driver):
    #当鼠标的位置小于最后的鼠标位置时,循环执行
    while location<last_location:
        #获取页面源码
        html_page=driver.page_source
        #利用Beautifulsoup4创建soup对象并进行页面解析
        soup=bs(html_page,"html.parser")
        time.sleep(2)
        #通过soup对象中的findAll函数图像信息提取
        imgs=soup.findAll('img',{'src':re.compile(r'https:.*\.(jpg|png)')})
        time.sleep(2)
        #将图片信息存储到Mysql数据库中
        for img in imgs:
            print(str(count)+':'+img.get('src')+'\n')
            name=str(count)
            style=img.get('src')[-3:]
            data=img.get('src')
            cursor.execute("insert into img (img_name,img_stype,img_data) values(%s,%s,%s)",(name,style,data))
            conn.commit()
            count+=1
        time.sleep(2)
        #通过Selenium模拟鼠标滚动
        js="$(document).scrollTop(%d)"%location  
        driver.execute_script(js) 
        location+=500
        time.sleep(3)
        imgs=[]

url="https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111111&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E5%85%AB%E5%8D%A6%E5%9B%BE&oq=bagua&rsp=0"
#启动浏览器,打开网站
driver=start_brower(url)
#mysql数据库连接方式
conn=pymysql.connect(host='localhost',port=3306,user='admin',password='admin',db='img')
try:    
    if conn:
        print("数据库连接成功")
        cursor=conn.cursor()
        get_img_information(0,3000,1,driver)
        cursor.close()
        conn.close()
    else:
        print("数据库连接失败")
finally:
    #退出浏览器
    driver.quit()

其主要思路如下:

第一步:使用selenium打开谷歌浏览器驱动

第二步:打开要访问的网站

第三不:将selenium打开的网站源码赋给一个对象

第四步:利用Beautifulsoup4创建soup对象,并解析页面,得到页面数据

第五步:利用soup对象中的findAll函数提取相应的图片数据

第六步:将图片数据写入相应的盘中

第七步:通过selenium模拟鼠标向下滚动,回到第三步,循环执行,直到滚动到所设定的鼠标位置然后退出。

最后一步退出浏览器

是不是很简单的,另外4.0版本正在写,代码数量也会相应的增加,不过功能也更加强大,不仅仅只是输入url提取图片数据,还有其他方式,之后我会将4.0版本代码放到CSDN博客上来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值