爬取百度热点话题

前言

怎么说呢,主要是想把这个实时热点话题这个功能添加到自己的网站导航里面,这样就免得自己还要进网站看,自己以前学的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库
    首先呢我们要先升级一下pip

    python -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.
    就先安装wheel

    pip install wheel

    再安装pymysql

    pip install pymysql
  • 其次如果发现获取到的源码中文是 \xb0\xb2\xcf这种格式
    在read()后面加上decode('gbk') 可以见源码第13行
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注