糗事百科爬虫案例

爬取糗事百科的热门的所有段子的作者、标题、内容链接、好笑数、评论数

# coding=utf-8

from lxml import etree
import requests
import json
class QiubaiSpider:
    def __init__(self):
        self.url_temp="https://www.qiushibaike.com/8hr/page/{}/"
        self.header={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"}
    def get_url_list(self):
        url_list=[self.url_temp.format(i) for i in range(1,14)]
        return url_list

    def parse_url(self,url):
        print("正在爬取:",url)
        response=requests.get(url,headers=self.header)
        return response.content.decode()
    def get_content_list(self,html_str):
        html=etree.HTML(html_str)
        #1.分组
        div_list=html.xpath("//div[@class=‘recommend-article‘]//li")
        content_list=[]
        for div in div_list:
            item={}
            item["作者名"]=div.xpath(".//span[@class=‘recmd-name‘]/text()")[0] if len(div.xpath(".//span[@class=‘recmd-name‘]/text()"))>0 else None
            item["标题"]=div.xpath(".//a[@class=‘recmd-content‘]/text()")
            item["内容链接"]=div.xpath(".//a[@class=‘recmd-content‘]/@href")
            item["内容链接"]=‘https://www.qiushibaike.com‘+item["内容链接"][0] if len(item["内容链接"])>0 else None
            item["好笑数"]=div.xpath(".//div[@class=‘recmd-num‘]/span/text()")
            item["好笑数"]=item["好笑数"][0] if len(item["好笑数"])>0 else None
            item["评论"]=div.xpath(".//div[@class=‘recmd-num‘]/span/text()")[-2]
            #item["评论"]=item["评论"][3] if len(item["评论"])>0 else None
            content_list.append(item)
        return content_list
    #b保存
    def save_content(self,content_list):
        with open("qiubai.txt","a",encoding="utf-8") as f:
            for content in content_list:
                f.write(json.dumps(content,ensure_ascii=False))
                f.write("\n")
        print("保存成功")

    def run(self):
        #1.根据url地址规律,构造url列表
        url_list=self.get_url_list()
        #2.发送请求,获取响应
        for url in url_list:
            html_str=self.parse_url(url)
            #3.提取数据
            content_list=self.get_content_list(html_str)
            #4.保存
            self.save_content(content_list)

if __name__ == ‘__main__‘:
    qiubai=QiubaiSpider()
    qiubai.run()

原文地址:https://www.cnblogs.com/-chenxs/p/11419066.html

时间: 2024-10-27 22:49:20

糗事百科爬虫案例的相关文章

Python爬虫(十八)_多线程糗事百科案例

多线程糗事百科案例 案例要求参考上一个糗事百科单进程案例:http://www.cnblogs.com/miqi1992/p/8081929.html Queue(队列对象) Queue是python中的标准库,可以直接import Queue引用:队列时线程间最常用的交互数据的形式. python下多线程的思考 对于资源,加锁是个重要的环节.因为python原生的list,dict等,都是not thread safe的.而Queue,是线程安全的,因此在满足使用条件下,建议使用队列 初始化:

python 多线程糗事百科案例

案例要求参考上一个糗事百科单进程案例 Queue(队列对象) Queue是python中的标准库,可以直接import Queue引用;队列是线程间最常用的交换数据的形式 python下多线程的思考 对于资源,加锁是个重要的环节.因为python原生的list,dict等,都是not thread safe的.而Queue,是线程安全的,因此在满足使用条件下,建议使用队列 初始化: class Queue.Queue(maxsize) FIFO 先进先出 包中的常用方法: Queue.qsize

Python爬虫--抓取糗事百科段子

今天使用python爬虫实现了自动抓取糗事百科的段子,因为糗事百科不需要登录,抓取比较简单.程序每按一次回车输出一条段子,代码参考了 http://cuiqingcai.com/990.html 但该博主的代码似乎有些问题,我自己做了修改,运行成功,下面是代码内容: 1 # -*- coding:utf-8 -*- 2 __author__ = 'Jz' 3 import urllib2 4 import re 5 6 #糗事百科爬虫类 7 class QSBK: 8 #初始化 9 def __

Python爬虫实战一之爬取糗事百科段子

参考资料:http://cuiqingcai.com/990.html 1.非面向对象模式 完整代码1: # -*- coding: utf-8 -*-import reimport urllib2import urllibimport threadimport time page = 1url = 'http://www.qiushibaike.com/hot/page/' + str(page)user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;

python3 爬虫---爬取糗事百科

这次爬取的网站是糗事百科,网址是:http://www.qiushibaike.com/hot/page/1 分析网址,参数'page/'后面的数字'1'指的是页数,第二页就是'/page/2',以此类推... 一.分析网页 网页图片 然后明确要爬取的元素:作者名.内容.好笑数.以及评论数量 每一个段子的信息存放在'div id="content-left"'下的div中 爬取元素的所在位置 二.爬取部分 工具: Python3 requests xpath 1.获取每一个段子 1 #

芝麻HTTP:Python爬虫实战之爬取糗事百科段子

首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致之前的代码没法用了,会导致无法输出和CPU占用过高的情况,是因为正则表达式没有匹配到的缘故. 现在,博主已经对程序进行了重新修改,代码亲测可用,包括截图和说明,之前一直在忙所以没有及时更新,望大家海涵! 更新时间:2015/8/2 糗事百科又又又又改版了,博主已经没心再去一次次匹配它了,如果大家遇到长时间运行不出结果也不报错的情况,请大家参考最新的评

【python】抄写大神的糗事百科代码

照着静觅大神的博客学习,原文在这:http://cuiqingcai.com/990.html 划重点: 1. str.strip() strip函数会把字符串的前后多余的空白字符去掉 2. response.read().decode('utf-8','ignore')  要加'ignore'忽略非法字符,不然总是报解码错误 3. python 3.x 中  raw_input 改成 input 了 4. 代码最好用notepad++先写 格式清晰一点 容易发现错 尤其是缩进和中文标点的错误

Python爬虫(十七)_糗事百科案例

糗事百科实例 爬取糗事百科段子,假设页面的URL是: http://www.qiushibaike.com/8hr/page/1 要求: 使用requests获取页面信息,用XPath/re做数据提取 获取每个帖子里的用户头像连接.用户姓名.段子内容.点赞次数和评论次数 保存到json文件内 参考代码 #-*- coding:utf-8 -*- import requests from lxml import etree page = 1 url = 'http://www.qiushibaik

爬虫二:爬取糗事百科段子

这一次我们利用BeautifulSoup进行网页的解析,方法其实跟前一次的差不多,只是这里我们爬取的是糗事百科,糗事百科有反爬机制,我们需要模拟用户来访问糗事百科网站,也就是加上头部信息headers,其实整体思路与上一篇所写爬虫的思路差不多,拿个速度可以共用. 1.首先我们在打开网页,并在网页空白处右击选择"检查"在弹出的网页里选择"Network" 2.然后按下"F5"刷新一下 3.在刷新后的页面里我们可以看到多条信息,任意选择一条信息点开