入门级Python 正则表达式与Sqlite3数据库练习 爬取糗事百科热门

入门级Python 正则表达式与Sqlite3数据库练习 爬取糗事百科热门_第1张图片

使用正则解析某网站,并写入数据库

爬取网站之前的准备流程:
1.研究正常用户浏览网页数据的步骤
2.研究网站数据的加载方式,例如:静态页面、js动态加载…
3.测试普通的请求能否拿回数据
4.研究网站数据加载规则及反爬措施,例如:携带cookie、携带指定参数、携带签名认证…
5.开始编写爬虫项目

import requests##引入请求库
import re#引入正则
import sqlite3#引入sqlite3数据库
import time#引入时间模块,控制访问速度
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0'
}#请求头
url = 'https://www.qiushibaike.com/hot/'#起始页地址
db = sqlite3.connect('QSBK.db')#连接数据库,如没有同名数据库,则默认建立
cursor = db.cursor()#连接数据库游标
create_sql = "CREATE TABLE IF NOT EXISTS QSBK_DATA (ID INTEGER PRIMARY KEY,段子作者 VARCHAR(20),作者年龄 INTEGER (10),内容 VARCHAR )"##创建数据库sql语句
cursor.execute(create_sql)##执行sql语句
while True:###因之后要翻页,遂循环
    response = requests.get(url,headers=headers)#请求返回数据
    time.sleep(1)
    html = response.text#将获取到的网页源代码内容的文本定义给一个变量html,以便解析
    pattern = re.compile(r'h2>(.*?)(\d\d)
.*?(.*?)',re.S)#编写正则表达式规则,提取作者,作者年龄,内容 result = re.findall(pattern,html)###findall()函数 查找所有结果,得到一个列表,包含元组数据,元组里包含的就是作者,作者年龄,内容 for idx,info in enumerate(result):#枚举法 遍历结果内的所有内容,其实枚举法并无必要 也就是练习一下 #print(idx,'\n',author,age,'\n',content.strip('\n').replace('
','\n'))#测试输出结果 author = info[0] age = info[1] content = info[-1] print('正在将爬取内容写入导数据库.') print('✿'*80) insert_sql = f"INSERT INTO QSBK_DATA (段子作者,作者年龄,内容) VALUES ('{author}',{age},'{content}')"##建立sql语句,数据插入到数据库 cursor.execute(insert_sql)##执行sql语句 db.commit()##提交执行 ul_pattern = re.compile(r'
    .*?
',re.S)#查找下一页,因ul标签里包含数据结构相同,先编写正则表达式提取ul标签包裹的内容 ul_result = re.search(ul_pattern,html)#获取结果,正则表达式的search()函数,得到的会是一个对象 #print(ul_result.group()) 如需输出结果 ,需调用group()函数 next_pattern = re.compile(r'a href="(.*?)".*?next">(.*?)',re.S)#编写下一页的正则式 next_result = re.findall(next_pattern,ul_result.group())#根据正则表达式 提取下一页的短网址以及文字'下一页' time.sleep(1) if next_result:##如果下一页的结果为真为True url ='https://www.qiushibaike.com' + next_result[0][0]#那么拼接下一页的完整网址 print('正在爬取下一页内容....') print('■'*50) else: print('爬取完成!') print('☀'*50) cursor.close()##关闭数据库游标 db.close()##关闭数据库 break

作者及内容正则表达式编写↓↓↓↓↓↓↓

入门级Python 正则表达式与Sqlite3数据库练习 爬取糗事百科热门_第2张图片

下一页正则表达式编写↓↓↓↓↓↓↓↓

入门级Python 正则表达式与Sqlite3数据库练习 爬取糗事百科热门_第3张图片

将下一页短址从列表+元组按照索引提取↓↓↓↓↓↓

入门级Python 正则表达式与Sqlite3数据库练习 爬取糗事百科热门_第4张图片

获取下一页网之后 重新开始循环↓↓↓↓↓↓↓↓↓↓↓↓

入门级Python 正则表达式与Sqlite3数据库练习 爬取糗事百科热门_第5张图片

数据库界面↓↓↓↓↓↓↓↓

入门级Python 正则表达式与Sqlite3数据库练习 爬取糗事百科热门_第6张图片

ps:可能访问过快,截止发稿前,已经connection error~

你可能感兴趣的:(import,this)