【云计算】python3实现网页爬虫并入库mysql实例教程
小标 2018-12-24 来源 : 阅读 841 评论 0

摘要:本文主要向大家介绍了【云计算】python3实现网页爬虫并入库mysql实例教程,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

本文主要向大家介绍了【云计算】python3实现网页爬虫并入库mysql实例教程,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。


python爬虫非常的好玩,比java代码简洁很多,xpath库对网页的爬取和数据提取支持的也非常好,安装xpath库很简单,这里不再细讲,直接看关键代码:


import time
import traceback
import requests
import pymysql.cursors
from lxml import etree
from Include.pyBean.WallPaperBean import WallPaperBean
# 该类任务是爬取这个网站的壁纸 //ioswall.com/ 

IPHONEWALLS_URL = '//ioswall.com/category/{category_id}/page/{page}'

CATEGORY_INFO = {
    'Original': ('original'),
    'Love': ('love'),
    'Flowers': ('flowers'),
    'technology': ('Technology')
}
wallPaperBeanList = []

def get_data(href):
    # 爬一波网页源码
    try:
            response = requests.get(href, timeout=10)
            if response.status_code == 200:
                html = etree.HTML(response.text)
                # result = etree.tostring(html)
                return html
            else:return '[]'
    except:
        print(traceback.format_exc())
        print('retry>>>')
        try:
            response = requests.get(href, timeout=30)
            if response.status_code == 200:
                html = etree.HTML(response.text)
                # result = etree.tostring(html)
                return html
            else:return '[]'
        except:
            print('failure>href>')
            print(href)
            return '[]'


def savaDataToDateBase():


    # 创建sql语句,并执行
    create_tab_sql = "CREATE TABLE `wallpaper` (`id` INT(11) NOT NULL AUTO_INCREMENT,`category` VARCHAR(255) COLLATE utf8_bin NOT NULL,`view_img` VARCHAR(255) COLLATE utf8_bin NOT NULL,`img` VARCHAR(255) COLLATE utf8_bin NOT NULL,`created_time` VARCHAR(255) COLLATE utf8_bin ,`img_tag` VARCHAR(255) COLLATE utf8_bin ,PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;"

    for ll in range(0, len(wallPaperBeanList)):
        # 连接MySQL数据库
        connection = pymysql.connect(host='127.0.0.1', port=3306, user='admin', password='admin', db='AllThingArePower',
                                     charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)

        # 通过cursor创建游标
        cursor = connection.cursor()
        # insert_sql = "INSERT INTO 'wallpaper' ('category','view_img','img','created_time','img_tag') VALUES ("+ wallPaperBeanList[ll].category +','+wallPaperBeanList[ll].view_img +','+wallPaperBeanList[ll].img +','+wallPaperBeanList[ll].created_time +','+'null' +')'

        # print('category==' + wallPaperBeanList[ll].category + ';view_img==' + str(
        #     wallPaperBeanList[ll].view_img) + ';img==' + str(wallPaperBeanList[ll].img) + ';created_time==' + str(wallPaperBeanList[ll].created_time) + ';img_tag==' + str(wallPaperBeanList[ll].img_tag))
        # cursor.execute(insert_sql)

        # 不要用 % 或者 + 操作符来拼接SQL语句,应该使用占位符。即execute的第二个参数。
        # 插入数据操作
        cursor.execute('insert into wallpaper (category,view_img,img,created_time,img_tag) values (%s,%s,%s,%s,%s)', (str(wallPaperBeanList[ll].category), str(
            wallPaperBeanList[ll].view_img),str(wallPaperBeanList[ll].img),str(wallPaperBeanList[ll].created_time),str(wallPaperBeanList[ll].img_tag)))

        # 提交SQL
        connection.commit()

        # 关闭数据连接
        connection.close()
def auto_get_data():


    for k, v in CATEGORY_INFO.items():
        # for page in range(1, 2):  # 测试时小批量爬取使用
        for page in range(1, 1100):    # 正式爬取的时候页数调大
            url = IPHONEWALLS_URL.format(category_id=v, page=page)
            response_data = get_data(url)

            if   response_data == '[]':
                break
            # print('response_data==' + str(etree.tostring(response_data)))
            # 通过contains()方法,第一个参数传入属性名称,第二个参数传入属性值,只要此属性包含所传入的属性值,就可以完成匹配了。
            imgUrls = response_data.xpath('//li//div//a/img[contains(@class, "attachment-post-thumbnail size-post-thumbnail wp-post-image")]/@src')
            createTimes =  response_data.xpath('//li//div//li/a/text()')

            for nn in range(0,len(imgUrls)):
                imgUrl = imgUrls[nn]
                wallPaperBean = WallPaperBean(k, imgUrl,imgUrl,createTimes[nn],'','')
                wallPaperBeanList.append(wallPaperBean)
                # print('created_time==' + createTimes[nn])
                # print('category==' + k)
                # print('view_img==' + imgUrl)
                # print('img==' + wallPaperBean.img)
                print('现在的list中图片数量==' + str(len(wallPaperBeanList)))
            time.sleep(1)
    # 操作mysql数据做入库操作
    savaDataToDateBase()

# 入库后查询库里的数据操作
def queryDataFromDB():
    # 连接MySQL数据库
    connection = pymysql.connect(host='127.0.0.1', port=3306, user='admin', password='admin', db='AllThingArePower',
                                 charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)

    # 通过cursor创建游标
    cursor = connection.cursor()
    # 查询数据操作
    result = cursor.execute('select category,view_img,created_time from wallpaper where id<%s',(10))
    print("-----------华丽分割线------------")
    print(result)
    # for data in result:
    #     print(data)
    # 提交SQL
    connection.commit()

    # 关闭数据连接
    connection.close()


if __name__ == '__main__':
     auto_get_data()
    # queryDataFromDB()


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据安全频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程