Python爬虫实战——爬取糗事百科网的段子信息(基于re模块)

目标

爬取糗事百科网“文字”专题中的信息,需要爬取的信息有:用户ID、用户等级、用户性别、发表的段子文字信息、好笑数量和评论数量。

网址

https://www.qiushibaike.com/text

思路:

(1)手动浏览“文字”专题的信息,容易发现url也是简单的按数字递增的方式构造的,即

https://www.qiushibaike.com/text/page/1/

https://www.qiushibaike.com/text/page/2/

...

(2)构建爬取信息的函数getInfo(),传入的参数为每一页的url地址

(3)将爬取的信息写入txt文件

具体代码如下:

import requests
import time, re

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}

info_lists = []    #初始化列表,用于装入爬虫信息

def judgementSex(sex):
    #判断性别
    if sex == 'manIcon':
        return '男'
    else:
        return '女'

def getInfo(url):
    #爬取信息
    r = requests.get(url,headers=headers)
    user_ids = re.findall('

(.*?)

', r.text, re.S) #用户ID levels = re.findall('
(.*?)
', r.text, re.S) #用户等级 sexs = re.findall('
', r.text, re.S) #用户性别 contents = re.findall('
.*?(.*?)', r.text, re.S) #笑话内容, #这里需要注意的是,虽然段子信息在标签中,但如果只提取标签会提取到符合规律但不是段子信息的内容,所以需要把匹配的正则写的更详细,加上
标签。由于
标签与便签之间留有几行空格,所以要通过.*?来匹配出。 laughs = re.findall('(\d+)', r.text, re.S) #好笑数 comments = re.findall('(\d+) 评论', r.text, re.S) #评论数 for user_id, level, sex, content, laugh, comment in zip(\ user_ids, levels, sexs, contents, laughs, comments): info = { 'user_id':user_id, 'level':level, 'sex':judgementSex(sex), 'content':content, 'laugh':laugh, 'comment':comment, } info_lists.append(info) #将信息写入字典,添加到列表中 pass if __name__ == '__main__': urls = ["https://www.qiushibaike.com/text/page/{}/"\ .format(str(i)) for i in range(1,14)] for url in urls: print("正在爬取"+url) getInfo(url) time.sleep(2) for info_list in info_lists: #遍历列表,写入文件 try: f = open("qiushibaike.txt", 'a+') f.write(info_list['user_id'] + '\n') f.write(info_list['level'] + '\n') f.write(info_list['sex'] + '\n') f.write(info_list['content'] + '\n') f.write(info_list['laugh'] + '\n') f.write(info_list['comment'] + '\n') f.close() except UnicodeEncodeError: #此处由于编码问题,在写入content时会出现UnicodeEncodeError,这里暂时先忽略。 pass

你可能感兴趣的:(Python爬虫实战——爬取糗事百科网的段子信息(基于re模块))