爬虫-菜谱信息爬取(保存至数据库)
目录
爬虫爬取思路
python代码
数据库代码
后期发现:
解决方法:
词云制作
爬虫爬取思路
python代码
import requests # 请求
from lxml import etree
import MySQLdb
from fake_useragent import UserAgent
import timedish = MySQLdb.connect(host='localhost',user='root',passwd='123456',db='xiachufang'
)
cur = dish.cursor()
dishname1 = ''
materials1 = ''
dishurl1 = ''
list1 = []f = open("dish.text", mode="w", encoding="utf-8")def insert(dishname, materials, dishurl):sql='insert into dish(dishname, materials, dishurl) values(%s, %s, %s)'params = (dishname, materials, dishurl)cur.execute(sql, params)ua = UserAgent()
headers = {'User-Agent': ua.random
}url1 = 'https://www.xiachufang.com/explore?page={}'
resp = requests.get(url1, headers=headers)for index in range(10):resp = requests.get(url1.format(index), headers=headers)#print(resp.text)html1 = etree.HTML(resp.text)time.sleep(1.2)for num in range(1, 26):str1 = '/html/body/div[4]/div/div/div[1]/div[1]/div/div[2]/div[1]/ul/li[{}]/div/div/p[1]/a/text()'str2 = '/html/body/div[4]/div/div/div[1]/div[1]/div/div[2]/div[1]/ul/li[{}]/div/div/p[2]/a/text()'str3 = '/html/body/div[4]/div/div/div[1]/div[1]/div/div[2]/div[1]/ul/li[{}]/div/a/@href'dishnames = html1.xpath(str1.format(num))time.sleep(1.2)for dishname in dishnames:dishname1 = dishnameprint('菜名:', end='')print()print(dishname.strip())materials = html1.xpath(str2.format(num))print('原材料:')for material in materials:list1.append(material)list1.append(' ')print(material, end=' ')print()print('详细烹饪流程URL:')step_url = html1.xpath(str3.format(num))for url in step_url:newurl = 'https://www.xiachufang.com'+urldishurl1 = newurlprint(newurl)print('---------------------')materials1 = ''.join(list1)f.write(dishname1+' '+materials1+' ')list1.clear()insert(dishname1, materials1, dishurl1)dish.commit()
数据库代码
CREATE DATABASE IF NOT EXISTS xiachufangCREATE TABLE IF NOT EXISTS dish
(
dishid INT AUTO_INCREMENT,
dishname VARCHAR(300),
materials VARCHAR(100),
dishurl VARCHAR(100),
PRIMARY KEY(dishid)
)ENGINE=INNODB DEFAULT CHARSET=utf8ALTER TABLE dish CONVERT TO CHARACTER SET utf8mb4
注意:将连接数据的数据换成自己的
后期发现:
后期运行的时候发现报了一个错误:
Incorrect string value: '\\xF0\\x9F\\x94\\xA5\\xE5\\x8F...' for column 'dish
排查发现,是因为在网站爬取的信息中包含表情包,而我们是将信息保存到数据库中的,但是数据库采用的是utf-8编码,是三字节为一个单位,表情包是采用四个字节为一个单位,因此报错。
解决方法:
(请看大佬链接)彻底解决:java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94‘ for column ‘name‘ at row 1_小达哥的垃圾桶的博客-CSDN博客
词云制作
先上代码:
import os
import numpy as np
import jieba
from PIL import Image
from wordcloud import WordCloudif __name__ == '__main__':# 打开文本with open('dish.text', 'r', encoding='utf-8') as f:# 汉字词云不同于英文词云,需要将空格,换行等替换掉text = f.read().replace(' ','').replace('\n','').strip()# 使用jieba库进行分割text = jieba.cut(text)text = ''.join(text)# 这是要导入的模板样式mask = np.array(Image.open('1.png'))# mask接受图片蒙版# font_path是字体,如果不加上的化,词云就识别不了汉字,呈现的将会是空格# background_color是背景颜色,当时开可以设置长度和宽度等,大家可以根据自己的需求添加wordcloud = WordCloud(mask=mask,font_path='HYNanGongTiJ-2.ttf',background_color='white').generate(text)# 保存wordcloud.to_file('test.jpg')
友情提醒:
注意需要导入相关的库,不然会出错
我们直接在终端使用pip导入,可能会比较慢,因此推荐使用国内镜像
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
爬虫-菜谱信息爬取(保存至数据库)相关推荐
- Python爬虫实战 | (7) 爬取万方数据库文献摘要
在本篇博客中,我们将爬取万方数据库,首先我们打开万方首页http://www.wanfangdata.com.cn: 在搜索框中输入关键词,选择期刊.学位或会议,点击搜论文,并可得到与关键词相关的期刊 ...
- Python爬虫实战 | (12) 爬取万方数据库文献摘要并存入MongoDB
之前在Python爬虫实战(7)中曾爬取过万方,本篇博客的爬取解析过程和之前几乎完全一样,不同的是数据存储方式,之前是存储到文件中(csv,txt,json,excel等),这次我们将提取的论文信息存 ...
- 【Python】Scrapy完成电影信息爬取并存入数据库
本文使用了scrapy框架对电影信息进行爬取并将这些数据存入MySQL数据库. 一.安装相关python模块 根据你所使用的python包管理器安装相应的模块.比如使用pip: pip install ...
- 把爬取信息导出到mysql,关于爬虫学习的一些小小记录(四)——爬取数据存入数据库...
关于爬虫学习的一些小小记录(四)--爬取数据存入数据库 创建数据库 pymysql 模块 具体操作 预知后事如何 前面我们已经讲了怎么访问网页,并且从网页源码中提取数据.既然数据有了,怎样管理就是下一 ...
- Python爬虫入门(爬取豆瓣电影信息小结)
Python爬虫入门(爬取豆瓣电影信息小结) 1.爬虫概念 网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或脚本.爬虫的本质是模拟浏览器打开网页,获取网页中我们想要的那部分数据. 2.基本流程 ...
- 教你如何使用Java代码从网页中爬取数据到数据库中——网络爬虫精华篇
文章目录 1:网络爬虫介绍 2:HttpClients类介绍 2.1 HttpGet参数问题 2.2 HttpPost参数问题 2.3 连接池技术问题 3:Jsoup介绍 4:动手实践如何抓取网页上数 ...
- [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) —— 数据的持久化——使用MongoDB存储爬取的数据
上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(二) -- 编写一个基本的 Spider 爬取微博用户信息 在上一篇博客中,我们已经新建了一个爬虫应用,并简单实现了爬取一位微 ...
- 爬虫入门—requests模块基础之药监企业信息爬取
爬虫入门-requests模块基础之药监企业信息爬取 Author: Labyrinthine Leo Init_time: 2021.02.22 Key Words: Spider.reques ...
- 爬虫实战:爬取bilibiliTop100条热门视频信息
爬取bilibiliTop100条热门视频信息 对于信息的爬取可以分为三个步骤进行处理,分别是获取网页.获取和解析数据最后保存数据.于是我们的主函数的框架如下: def main(): # 1. 获取 ...
最新文章
- 将多个文件的属性添加到数据库
- Delphi第三方组件安装DCU.PAS.DPK.BPL.ActiveX控件
- 6个信号提醒是时候跳槽了 CIO务必get到
- java城市级联一次查询_我的城市没有任何设计活动,所以我自己组织了一次。...
- 常见的排序算法二——希尔排序
- Error installing bundler:bundler requires Ruby version >= 2.3.0.
- Keras自定义Loss函数
- Cocos creator之javascript闭包
- 1.2 Zend_Acl (2)
- PyCharm 入手第一记
- java算法训练 Interval
- PAT乙级刷题感想及踩坑总结
- Unity查找图片被哪个Prefab引用
- 面向对象的15、18位中国大陆身份证号码解析、工具
- OpenGauss数据库的安装与运行
- 手机连电脑热点,电脑连手机热点的ip分配问题
- 值得留意在线支持插件
- 游吟诗人之中二病犯了
- 用python写爬虫 (三)获取数据、requests库
- HTC Vive开发笔记之手柄震动