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:正作为一名大数据技术方向的大学生学习中,我也会把我学习中完成的一些任务实训发表出来和大家一起学习,还请大家请多多指教。
全部评论 (0)
还没有任何评论哟~
