爬虫-糗事百科数据

数据怎么来

1)首先我们还是先登录要爬取的网站糗事百科。用谷歌浏览器F12解析页面数据。

 

 

翻到页面最下面,翻到第二页,网址发生变化,如上图所示。我们不妨得出结论,有数字参数表示页数,总共有13页。

https://www.qiushibaike.com/8hr/page/{页数}/

 

2)看上图的Response信息是html数据,这里我们采用BeautifulSoup模块解析。

接下来,我们开始对数据处理。

 

数据处理

 

1)文章链接html处理

附上部分源码

def deal_html_data(self, res):
    data = []
    msg_dict = dict()
    msg_dict['today'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    soup = BeautifulSoup(res, "html.parser")
    # li标签class属性有多种参数值,如item typs_video,item typs_multi等,采用正则
    li_list = soup.find_all('li', class_=re.compile((r'item typs_(\w+)')))
    for li in li_list:
        # 获取超链接
        msg_dict["href"] = li.find('a', class_='recmd-content').get('href')
        # 获取篇子题目
        msg_dict["content"] = li.find('a', class_='recmd-content').get_text()
        # 点赞数
        msg_dict["click"] = li.find_all('span')[0].get_text()
        # 作者姓名
        msg_dict["actor"] = li.find('span', class_='recmd-name').get_text()
        # print(li.find_all('span'))
        # 评论数
        msg_dict["review"] = li.find_all('span')[3].get_text() if len(li.find_all('span')) == 6 else str()

        # 访问子链接去获取作者信息
        user_dict = self.get_child_html(msg_dict["href"])
        msg_dict.update(user_dict)
        data.append(msg_dict.copy())
    return data

 

返回的html的只能采集到文章信息,对作者的信息我们需要到子链接去采集。

 

2)用户信息子链接数据采集

 

 

当我们点开某一篇文章时,每一篇文章后面都是此类链接 

https://qiushibaike.com/+上图部分。

好了,知道了这些,只需要写个循环,读取文章信息的时候再去读取作者信息,调用两次get请求即可。

附上解析子链接html。

def get_child_html(self, href):
    _sex = str()
    _age = int()
    child_url = self.base_url + href
    res = requests.get(child_url, headers=self.headers).text
    i_soup = BeautifulSoup(res, "html.parser")
    div_list = i_soup.find('div', class_='side-user-top')
    user_sex = div_list.find('span', class_=re.compile((r'side-fans-num (\w+)')))
    # print(user_sex)
    if user_sex:
        # 性别
        _sex = re.search(r'user(\w)', str(user_sex)).group()[-1]
        # 年龄
        _age = re.search(r'(\d+)', str(user_sex)).group()
    return {"sex": _sex, "age": _age}

3)数据落地

可以写入文件,也可以写入数据库。这里采用数据库落地。

 

效果图

数据落地,如下图所示。

 

 

 程序运行,如下图展示。这里为了更好的展示,加了进度条效果展示。

 

 

更多源码请参考原文:

https://mp.weixin.qq.com/s?__biz=Mzg3OTExODI3OA==&mid=2247484026&idx=1&sn=5b75ff99c960a6f36211916c0e91f03e&chksm=cf0810d3f87f99c58ba21745777455d9021567504a87beb279c2605e44bce0b5ea1ce96f702d&token=1242100797&lang=zh_CN#rd

 

posted @ 2021-03-10 15:55  水映枫像  阅读(154)  评论(0)    收藏  举报