Python爬取糗事百科段子

Python爬取糗事百科段子

Python2.7.15
今天我们来爬取糗事百科的段子

一、获取糗事百科的网页源码

首先,打开浏览器,进入糗事百科,复制它的网址。

在这里插入图片描述
然后我们翻个页,可以看到,网址变成了这样,加上了页码。
在这里插入图片描述
待会我们用代码翻页,就是更改这个网址最后的这个数字。

首先,我们引入代码对应的模块

# coding=utf-8
import urllib2
import re
import MySQLdb

utf-8是中文编码
urllib2模块的方法获取网页
re模块用来写正则表达式
MySQLdb是MySQL数据库对应的模块

老办法获取网页源码
不过这次加了一个for循环来翻页

for page in range(1,14):
    url = "https://www.qiushibaike.com/8hr/page/" + str(page) + "/"
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers = { 'User-Agent' : user_agent }
    request = urllib2.Request(url, headers=headers)
    response = urllib2.urlopen(request)
    content = response.read()

二、匹配正则

得到网页源码后,我们可以在源码里看到很多段子和很多的发布人,这里面有的段子是文字形式的,有的是图片,因为图片文字混在一起存比较麻烦所以我们先来简单的,只爬取并保存文字形式的段子。

先看源码
在这里插入图片描述
h2标签里是发布者的名称

在这里插入图片描述
span标签里是文字内容

在这里插入图片描述
a标签里是图片,如果该段子有图片的话

这三项是连在一起的,使用正则抓取它们
在这里插入图片描述
这里的re.S是多行匹配的意思

三、输出它们,并写入数据库

输出操作

    for item in items:
        haveImg = re.search("jpg", item[2])
        if not haveImg:
            new1 = re.sub('\n','', item[0])
            new2 = re.sub('\n','', item[1])
            new3 = new2.translate(None, "<br/>")
            print new1
            print new3

创建表(首先你得有数据库,并有你要写入的这个表)


conn=MySQLdb.connect(host="127.0.0.1",user="root",passwd="199855pz",db="pz",charset='utf8')
print '连接成功'
cursor = conn.cursor()
cursor.execute("DROP TABLE IF EXISTS DUANZI")
sql = '''CREATE TABLE DUANZI(name char(10) ,joke char(255))'''
cursor.execute(sql)

插入表

            insert_duanzi = ("INSERT INTO DUANZI(name,joke)" "VALUES(%s,%s)")
            data_duanzi = (new1, new3)
            cursor.execute(insert_duanzi, data_duanzi)
conn.commit()

四、完整代码与结果

# coding=utf-8
import urllib2
import re
import MySQLdb

conn=MySQLdb.connect(host="127.0.0.1",user="root",passwd="199855pz",db="pz",charset='utf8')
print '连接成功'
cursor = conn.cursor()
cursor.execute("DROP TABLE IF EXISTS DUANZI")
sql = '''CREATE TABLE DUANZI(name char(10) ,joke char(255))'''
cursor.execute(sql)

for page in range(1,14):
    url = "https://www.qiushibaike.com/8hr/page/" + str(page) + "/"
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers = { 'User-Agent' : user_agent }
    request = urllib2.Request(url, headers=headers)
    response = urllib2.urlopen(request)
    content = response.read()
    print content
    pattern = re.compile('<h2>(.*?)</h2>.*?<span>(.*?)</span>.*?</a>(.*?)<div class="stats">', re.S)
    items = re.findall(pattern, content)

    for item in items:
        haveImg = re.search("jpg", item[2])
        if not haveImg:
            new1 = re.sub('\n','', item[0])
            new2 = re.sub('\n','', item[1])
            new3 = new2.translate(None, "<br/>")
            print new1
            print new3
            insert_duanzi = ("INSERT INTO DUANZI(name,joke)" "VALUES(%s,%s)")
            data_duanzi = (new1, new3)
            cursor.execute(insert_duanzi, data_duanzi)
conn.commit()

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值