大家好,这里是小焦。说今天的项目之前,我们先来说说题外话。今天是一年一度的七夕情人节,作为一个单身狗,在这个欢快的节日里,当然还是努力学习,努力挣钱养家糊口呗。也希望尽快找到可以托付一生的另一半吧。好了,开始今天的小爬虫吧。
所谓说任何技术知识,学的再好不如练得好。最近我也是深有体会,书上的知识一看一个懂,下来写代码一脸懵逼。也是让我这个python小白很是郁闷,偶然看到知乎上一个大神一句话,让我醍醐灌顶。多看书不如多练习,可以在练习过程中,用到什么知识立马去学,然后学以致用,这样才可以达到高效率,一味的看书只会前学后忘。
确实,我之前老是抱着把一个阶段的东西看完,然后再写代码,可是当我去写得的时候发现学的已经忘得差不多了。而且在本次的项目中,我发现之前好的小知识点可以起到不小的作用。
糗事百科爬虫案例
好了,前面讲了一堆废话开始我们的正题。我们今天项目是糗事百科网站段子的爬虫。生活无趣,那就找点有意思的东西看看,本次这个网站就是一个原创笑话网站,看了一个段子也是非常的搞笑。
要准备的知识点
- python3
- requests库
- pyquery库
- 网站链接:https://www.qiushibaike.com/
我们要爬的这个网站非常简单,是一个静态网站,我们只需用requests和pyquery这两个库就能达到我们的要求了。首先我们就是分析网站内容,非常简单,万能的F12,我们只需在内容部分右键检查,然后就能查看它的源代码了。
从上面的源码中,非常简单明了的看到,一个文章包含在div中,我们只需点开,一层一层剥开块元素下面的内容,找出我们需要的内容在哪就行了。然后用pyquey库进行解析即可。
本次主要我们目标是是爬取作者的昵称、年龄、性别、内容、点赞数和评论数。这块就不详细展开说,我这边直接列出代码吧,每行内容我都有备注哦。
#2020.8.22 糗事百科爬虫
#焦康阳 个人博客:https://jiaokangyang.com
#功能:本次爬虫主要完成对糗事百科的段子爬取
import requests
from pyquery import PyQuery as pq
#先写一个函数进行网页内容爬取,并返回内容
def download_qiushi(url):
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3775.400 QQBrowser/10.6.4208.400',
}
a = requests.get(url,headers=headers)
return a.text
#该函数完成对网页内容分析,下载
def get_content(html,page):
#这块预先设置一个字符串,等会将获取到内容利用format方法填充到里面
shuchu = """第{}页 作者:{} 性别:{} 年龄:{} 喜欢:{} 评论:{} \n原文链接:{}\n\n{}\n-----------------\n"""
url = 'https://www.qiushibaike.com'
a = pq(html)
lists = a('.article').items()
for list in lists:
#获取作者名字
author = list('.author a h2').text()
#获取内容
content = list('.content span').text()
#喜欢的人数
vote = list('.stats .stats-vote .number').text()
#获取评论数
comments = list('.stats .stats-comments .number').text()
#原文链接
href = url + str(list('.contentHerf').attr('href'))
#获取作者的年龄和性别
author_info = list('.articleGender')
if author_info is not None: #这块判断是否为匿名用户
class_list = author_info.attr('class') #获取class属性,然后对比是否为男女属性
if 'womenIcon' in class_list: #网页源码中女性用的是womenIcon 样式,我们只需对比
gender = '女'
elif 'manIcon' in class_list:
gender = '男'
else:
gender = ''
age = author_info.text() #获取作者年龄
else: #如果没有的话就给性别年龄赋值为空
gender = ''
age = ''
#将获取到内容用format方法填充,并将内容保存到文件
save_txt(shuchu.format(page,author,gender,age,vote,comments,href,content))
#此方法将文件保存到qiushi,txt文件中
def save_txt(*args):
for i in args:
with open('qiushi.txt','a',encoding='utf-8') as f:
f.write(i)
def main():
#内容较多,我们设置爬取前三页的内容
for i in range(1,4):
url = 'https://qiushibaike.com/text/page{}'.format(i)
print('开始爬取第%d页'%i)
html = download_qiushi(url)
get_content(html, i)
print('爬取完成')
print('所有内容爬取完毕,请打开文件查看')
if __name__ == '__main__':
main()
代码已经放到上面,为了调用和修改方便,我是将每个实现的内容写成函数的格式。有不清楚的可以留言哦。
评论抢沙发