前言
怎么说呢,主要是想把这个实时热点话题这个功能添加到自己的网站导航里面,这样就免得自己还要进网站看,自己以前学的python2,有很多地方还是和python3不一样,这次也是第一次尝试用python3来写爬虫。团队大佬看完源码说正则匹配已经很老了,建议我使用beautifulSoup这个库emmm等我以后琢磨完了在用那个库写吧!
目标网站
python3源码
# coding:utf-8 import re # 正则匹配 import urllib.request # 获取源码 import pymysql def getHtml(url): page = urllib.request.Request(url) page.add_header('Connection', 'keep-alive') page = urllib.request.urlopen(page) html = page.read().decode('gbk') html = html.replace('\r', '').replace('\n', '').replace('\t', '') # 过滤\r\n\t reg = r'<td class="keyword">(.*?)</tr>' reg = re.compile(reg) content = re.findall(reg, str(html)) # 第一次筛选 return content html = getHtml('http://top.baidu.com/buzz?b=1&c=513&fr=topbuzz_b341_c513'); all = [] for i in html: content = [] reg2 = r'<a class="list-title" target="_blank" href="(.*?)" href_top="(.*?)">(.*?)</a>' # 链接和标题 reg = re.compile(reg2) UrlAndTitle = re.findall(reg2, i) content.append(UrlAndTitle[0][0]) # 链接 content.append(UrlAndTitle[0][2]) # 标题 reg3 = r'<td class="last"> <span class="icon-(.*?)">(.*?)</span></td>' # 指数 reg = re.compile(reg3) number = re.findall(reg3, i) content.append(number[0][0]) # 增加还是下降 content.append(number[0][1]) # 具体百度指数 all.append(content) # print(all) # 连接数据库 connect = pymysql.Connect( host='localhost', port=3306, user='root', passwd='123456', db='python', charset='utf8' ) # 获取游标 cursor = connect.cursor() # 清空数据库 cursor.execute("TRUNCATE TABLE `table`") # 插入数据 for i in all: sql = "INSERT INTO `table` (content, src, upordown,number) VALUES ('%s', '%s','%s', '%s')" data = (i[0], i[1], i[2], i[3]) cursor.execute(sql % data) connect.commit() # 关闭占用
数据库内容
遇到的坑
- python2连接数据库是MySQLdb库————python3是pymysql库
首先呢我们要先升级一下pippython -m pip install --upgrade pip -i https://pypi.douban.com/simple
为什么不用 python -m pip install --upgrade pip呢 主要是访问经常超时 会报 Exception错误
- 升级完后 再安装pymysql库,如果发现报错Could not build wheels for pymysql, since package 'wheel' is not installed.
就先安装wheelpip install wheel
再安装pymysql
pip install pymysql
- 其次如果发现获取到的源码中文是 \xb0\xb2\xcf这种格式
在read()后面加上decode('gbk') 可以见源码第13行