爬取糗事百科的段子
把糗事百科的段子信息爬取下来保存在txt文件内,内容有
用户名:
年龄:
好笑指数:
评论数:
段子内容:
借助火狐浏览器可以方便的查看网页源代码以及审查元素,便于爬取内容
此爬取的知识点:正则表达式
其实正则表达式是爬取代码的核心,熟练掌握是爬取普通网页的关键
一下是正则表达式的一些关键用法:
# coding: utf-8 # 网页请求包 import requests # 正则表达式包 import re # 1.准备url url = 'https://www.qiushibaike.com/hot/' # 2.发起请求,拿回源代码 response = requests.get(url) # 取出html源代码 html = response.content # ps:需要从html中根据正则匹配到总页数,转换为整数 pattern1 = re.compile(r'class="dots.*?<span.*?>(.*?)</span>', re.S) rs = re.search(pattern1 ,html) # group(index)根据分组索引 查找内容 total_page = rs.group(1) total_page = total_page.strip('\n') total_page = int(total_page) print '共%s页段子内容!'%total_page # ****************1.打开文件 file_handle = open('qsbk.txt','w') # for 循环获取每一页的html源代码x for x in range(1,total_page+1): print '正在爬取第%s页段子....'%x url = 'https://www.qiushibaike.com/hot/page/%s/'%x html = requests.get(url).content # 根据正则匹配每一页的段子内容 # 3.准备正则 # re.S DOTALL模式 .可以用来匹配所有的任意字符 pattern = re.compile(r'<div class=".*?qiushi_tag.*?<h2>(.*?)</h2>.*?<div class="articleGender.*?>(.*?)</div>.*?<span>(.*?)</span>.*?<i class="n.*?>(.*?)</i>.*?<i.*?>(.*?)</i>', re.S) # 4.查找所有的符合规则的数据 rs = re.findall(pattern ,html) # 写入每页的分割线 file_handle.write('=================第%s页===============\n'%x) for detail in rs: # 取出数据 name = detail[0] # strip函数()去除字符串中的某些字符 name = name.strip('\n') age = detail[1] content = detail[2] content = content.strip('\n') # 准备正则 pattern1 = re.compile(r'<br/>') # 使用sub函数做替换 content = re.sub(pattern1 ,'\n', content) vote_number = detail[3] comment_number = detail[4] # 写入的段子第一行 用户信息 s1 = '用户名:%s 年龄:%s\n'%(name, age) file_handle.write(s1) # 写入的段子第二行 段子评论数 好笑数 s2 = '好笑数:%s 评论数:%s\n'%(vote_number, comment_number) file_handle.write(s2) # 写入段子内容 file_handle.write(content) file_handle.write('\n\n') # 3.关闭文件 file_handle.close() print '数据写入成功!'