Python网络爬虫使用BeautifulSoup爬取网页内容并存入数据库案例

使用BeautifulSoup爬取网页内容并存入数据库案例

学习了Python网络爬虫,完成里一个比较完整的爬虫案例与大家分享

爬取地址:http://www.tipdm.com/cpzx/index.jhtml
任务:爬取网页中产品中心的小标题、简介、超链接,存入数据库
数据库使用的是Mysql,直接使用代码创建数据库数据表以及插入数据

长篇短写,代码如下:

import requests
import pymysql
from bs4 import BeautifulSoup


def get_html_text(url):
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36'
    }
    html_resutl = requests.get(url=url, headers=headers)
    return html_resutl.text


def get_title_link_intro(html_text_list):
    result_list = list()
    for i in range(len(html_text_list)):
        result_bs = BeautifulSoup(html_text_list[i],'lxml')
        search_con = result_bs.select('#t248 > div > div.con')
        for i_con in search_con:
            result_list.append([])
            result_list[len(result_list) - 1].append(i_con.select('h1>a')[0].text)
            result_list[len(result_list) - 1].append(i_con.select('div')[0].text)
            result_list[len(result_list) - 1].append(i_con.select('h1>a')[0].attrs['href'])
    return result_list


def connect_mysql():
    try:
        import pymysql
        connect = pymysql.connect(host='localhost', user='root', password='795247', port=3306)
        print('连接数据库成功')
        return connect
    except:
        print('连接数据库失败')
        return None


def mk_DB_base(connect: pymysql.connect):
    cursor = connect.cursor()
    sql_crdDB_newdb = 'CREATE DATABASE IF NOT EXISTS pzkdb'
    sql_use = 'USE pzkdb;'
    sql_crdTB_products = '''CREATE TABLE IF NOT EXISTS products(
                             `title` varchar(255) ,
                             `intro` varchar(255)  NULL DEFAULT NULL,
                             `link` varchar(255)  NULL DEFAULT NULL,
                             primary key (`title`)
                            ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
                            '''
    cursor.execute(sql_crdDB_newdb)
    cursor.execute(sql_use)
    cursor.execute(sql_crdTB_products)
    connect.commit()
    return True


def into_sql(connect: pymysql.connect, values_list, table_name='products'):
    # 存储数据结构为二维列表,存储在数据库的二维表中
    # 传入一位数据元组,values_list
    # 元组结构:Title(标题),intro(内容),link(对应标题链接)
    try:
        cursor = connect.cursor()
        sql_insert = 'insert into %s values(%s,%s,%s)' % (table_name, '%s', '%s', '%s')
        cursor.execute(sql_insert, values_list)
        print('插入一条数据:', values_list)
        return True
    except pymysql.err.IntegrityError:
        print('该数据已存在')
        return None
    except:
        return None


def into_list(connect: pymysql.connect, values_list):
    # 存储数据结构为二维列表,存储在数据库的二维表中
    # 传入一位数据元组,values_list
    # 元组结构:Title(标题),intro(内容),link(对应标题链接)
    try:
        for index_list in values_list:
            into_sql(connect=connect, values_list=index_list)
        print('数据插入完成')
        return True
    except:
        return None


if __name__ == '__main__':
    html_text_list=[]
    for i in range(1, 5):
        html_text_list.append(get_html_text(url='http://www.tipdm.com/cpzx/index_' + str(i) + '.jhtml'))
    result = get_title_link_intro(html_text_list)
    connect = connect_mysql()
    mk_DB_base(connect)
    into_list(connect, result)
    connect.commit()

这边也可以使用Xpath的方式进行切片爬取:

def get_title_link_intro(html_text_list):
    result_list = list()
    for i in range(len(html_text_list)):
        result_lxml = etree.HTML(html_text_list[i], etree.HTMLParser(encoding='utf-8'))
        search_con = result_lxml.xpath('//div[@class="con"]')
        for i_con in search_con:
            result_list.append([])
            result_list[len(result_list) - 1].append(i_con.xpath('h1/a/text()'))
            result_list[len(result_list) - 1].append(i_con.xpath('div/text()'))
            result_list[len(result_list) - 1].append(i_con.xpath('h1/a/@href'))
    return result_list

个人感觉Xpath比较好理解一些

PS:正作为一名大数据技术方向的大学生学习中,我也会把我学习中完成的一些任务实训发表出来和大家一起学习,还请大家请多多指教。

你可能感兴趣的:(Python网络爬虫使用BeautifulSoup爬取网页内容并存入数据库案例)