爬虫-糗事百科数据
数据怎么来
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


浙公网安备 33010602011771号