day68-爬取ajax内容
1建数据库语句
create database mogujie default character set='utf8';
use mogujie;
create table goods (
id int primary key auto_increment,
trade_itemid varchar(32),
img varchar(1024),
link varchar(1024),
title varchar(1024),
org_price varchar(32),
price varchar(32)
);
2数据库操作函数
import pymysql
# 获取数据库连接
def get_connection():
host = '127.0.0.1'
port = 3306
user = 'root'
password = '123456'
database = 'mogujie'
db = pymysql.connect(host, user, password, database, charset='utf8', port=port)
return db
# 获取数据库游标
def get_cursor(db):
cursor = db.cursor()
return cursor
# 关闭链接
def close_connection(db):
db.colos()
# 插入一条记录(可以被注入sql语句)
def insert_mogujie_record_sql(db, cursor, item):
sql = 'insert into goods (trade_itemid, img, link, title, org_price, price) values("%s","%s","%s","%s","%s","%s")'%(item['tradeItemId'], item['img'], item['link'], item['title'], item['orgPrice'], item['price'])
print(sql)
cursor.execute(sql)
# 需要上传,数据才能存入数据库
db.commit()
# 插入一条记录(不能被注入sql语句,建议采用)
def insert_mogujie_record(db, cursor, item):
sql = 'insert into goods (trade_itemid, img, link, title, org_price, price) values(%s,%s,%s,%s,%s,%s)'
cursor.execute(sql, (item['tradeItemId'], item['img'], item['link'], item['title'], item['orgPrice'], item['price']))
print(sql)
# 需要上传,数据才能存入数据库
db.commit()
sql = 'insert into goods (trade_itemid, img, link, title, org_price, price) values("%s","%s","%s","%s","%s","%s")'%(item['tradeItemId'], item['img'], item['link'], item['title'], item['orgPrice'], item['price'])
cursor.execute(sql)通过这种方式可以插入数据;但也可以被提交数据的人注入sql语句对数据库进行操作。插入形如a1");delete from movie;" 这种格式的语句。例如:
insert into movie ( title, actor) values ("a1");delete from movie;"", "ab", "dd")
故一般用下面语句:
sql = 'insert into goods (trade_itemid, img, link, title, org_price, price) values(%s,%s,%s,%s,%s,%s)'
cursor.execute(sql, (item['tradeItemId'], item['img'], item['link'], item['title'], item['orgPrice'], item['price']))通过将数据作为参数的形式插入而不是拼接字符串。
在上面注入sql的语句中可以通过对其使用:阻止分号转义或者删除分号两种方法可以使注入的sql语句失效。
3爬取ajx渲染的网页并存入数据库
import json
import re
from mogujie_db_helper import *
import requests
db = get_connection()
cursor = get_cursor(db)
# 获取单个网页
def get_page():
# 网址
url = 'https://list.mogujie.com/search?callback=jQuery21106839242500718683_1550628335676&_version=8193&ratio=3%3A4&cKey=15&page=2&sort=pop&ad=0&fcid=50020&action=trousers&acm=3.mce.1_10_1ks9s.128038.0.lNFGTrizXmwD3.pos_2-m_484852-sd_119&ptp=1.n5T00.0.0.OyhOtYtw&_=1550628335678'
# 伪装请求头
headers = {
"User-Agent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",
# 'Referer': "https://www.mogujie.com/",
# "Host": "api.mogujie.com"
}
# 请求网页并返回响应
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.content.decode('utf-8')
return None
# 解析网页
def parse_page(html):
pattern = re.compile('.*?\((.*?)\).*?;', re.S)
result = re.findall(pattern, html)[0]
# json格式转python格式
result_dict = json.loads(result)
result_list = result_dict['result']['wall']['docs']
for item in result_list:
print(item['title'])
insert_mogujie_record(db, cursor, item)
return result_dict
def main():
html = get_page()
parse_page(html)
if __name__ == '__main__':
main()
4Mysql环境变量配置
windows下配置环境变量
1.高级环境变量配置页面:系统变量 - path - 编辑 - 添加 - 将复制的路径粘贴,确定
2.echo %path% cmd中查看环境变量
linux和mac中配置环境变量
cd 进入用户目录
ls -la
vim .bash_profile
将路径粘贴到里面
source .bash_profile
5cmd中运行mysql
以下语句都是在cmd窗口中运行
5.1方法一
mysql -uroot -p cmd中链接数据库
登陆后:执行. D:\pythonwork\spider\day02\maoyan.sql 运行sql语句
show databses;
show tables;
show maoyan;
5.2方法二
登陆前:mysql -uroot -p123456 <D:\pythonwork\spider\day03\mogujie.sql 运行sql语句
经过上面语句后,已经执行了sql语句建好了数据库及表格
mysql -uroot -p 登陆mysql
登陆mysql后
删除数据库:drop database mogujie ;
查看所有数据库:show databases;
切换到数据库:use mogujie;
查看数据库下所有表格:show tables;
查看goods表有多少条数据:select count(*) from goods;
exit 退出当前登陆
desc 表名; 查看表格
5.3方法三
在cmd中登陆mysql后,直接在cmd窗口中输入sql语句建库,切换数据库及建表也可以创建。