爬虫 爬取糗事百科热门板块的信息

分析:

1、先查看返回的内容是否与显示的内容一样

2、再看页数的变化,每次会加一,总共13页,因此可以一次性构造地址列表

3、因此可直接结合 chrome插件 xpath helper 与 elemetns显示的内容进行定位要爬取的内容

用到的模块 requests+json+lxml+xpath

下面是代码:

import requests
import json
from lxml import etree

class QiubaiSpider:
    def __init__(self):
        self.url_temp = "https://www.qiushibaike.com/8hr/page/{}/"
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"}

    def get_url_list(self):  # 生成url_list
        return [self.url_temp.format(i) for i in range(1, 14)]

    def parse_url(self, url):  # 发送请求
        print(url)
        response = requests.get(url, headers=self.headers)
        return response.content

    def get_content_list(self,html_str):  # 提取数据
        html = etree.HTML(html_str)
        li_list = html.xpath("//div[@class=‘recommend-article‘]/ul/li")  # 分组
        content_list = []
        for li in li_list:
            item={}
            item["content"] = li.xpath("./div/a/text()") # 获取内容
            item[‘name‘] = li.xpath("./div/div/a/span/text()") # 获取姓名
            item[‘name‘] = item[‘name‘][0] if len(item[‘name‘])>0 else None
            item[‘content_img‘] = li.xpath("./a/img/@src") # 获取图片
            item[‘content_img‘] = ‘https:‘+item[‘content_img‘][0] if len(item[‘content_img‘])>0 else None
            item[‘auth_img‘] = li.xpath(".//a[@class=‘recmd-user‘]/img/@src")  # 获取用户头像
            item[‘auth_img‘] = ‘https:‘+item[‘auth_img‘][0] if len(item[‘auth_img‘])>0 else None
            item[‘recmd-num‘] = li.xpath(".//div[@class=‘recmd-num‘]/span/text()")  # 获取点赞数和评论数
            content_list.append(item)
        return content_list

    def save_content_list(self,content_list):  # 保存数据
        with open(‘qiubai‘,‘a‘,encoding=‘utf-8‘)as f:
            for i in content_list:
                f.write(json.dumps(i,ensure_ascii=False,indent=4))
                f.write(‘\n‘)
    def run(self):  # 实现主要逻辑
        # 1 url_list
        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_list(content_list)

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

原文地址:https://www.cnblogs.com/zq8421/p/11044366.html

时间: 2024-09-27 10:55:30

爬虫 爬取糗事百科热门板块的信息的相关文章

使用Python爬取糗事百科热门文章

默认情况下取糗事百科热门文章只有35页,每页20条,根据下面代码可以一次性输出所有的文章,也可以选择一次输出一条信息,回车继续.不支持图片内容的显示,显示内容包括作者,热度(觉得好笑的人越多,热度越高),内容.从热度最高开始显示到最低.实现代码如下: #!/usr/bin/python #coding:utf8 """ 爬取糗事百科热门文章 """ import urllib2 import re #模拟浏览器访问,否则无法访问 user_age

多线程爬取糗事百科热门段子 (改写前天的博客)

利用多线程爬取,除了先前用到的几个模块之外,还需用到threading模块和queue模块: 为每一件事情开启一个线程:构造url_list.发送请求.提取数据.保存数据 __init__方法添加三个实例属性队列分别存放:url.响应内容.处理后的数据 改写原先每一个方法里的代码,需要的东西直接从队列中取出,此时方法都无需多余参数了 每当从一个队列取出数据,记得执行task_done()方法,使计数减一 run()方法里把yaozhixing的事情都开启一个线程,比较慢的事情,比如网络请求,可以

Python爬虫爬取糗事百科段子内容

参照网上的教程再做修改,抓取糗事百科段子(去除图片),详情见下面源码: #coding=utf-8#!/usr/bin/pythonimport urllibimport urllib2import reimport threadimport timeimport sys #定义要抓取的网页#url = 'http://www.qiushibaike.com/hot/'#读取要抓取的网页#globalcontent = urllib.urlopen(url).read()#抓取段子内容#new_

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

闲来无事,学学python爬虫. 在正式学爬虫前,简单学习了下HTML和CSS,了解了网页的基本结构后,更加快速入门. 1.获取糗事百科url http://www.qiushibaike.com/hot/page/2/    末尾2指第2页 2.先抓取HTML页面 import urllib import urllib2 import re page = 2 url = 'http://www.qiushibaike.com/hot/page/' + str(page) #对应第2页的url

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

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

python beautifulsoup bs4爬虫 爬取糗事百科

声明:仅用于学习语法,请勿用于非法用途 import urllib.request import re from bs4 import BeautifulSoup # -*- coding:utf-8 -*- url = 'http://www.qiushibaike.com/hot/' user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers={'User-Agent':user_agent} request = u

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

1.本文的目的是练习Web爬虫 目标: 1.爬去糗事百科热门段子 2.去除带图片的段子 3.获取段子的发布时间,发布人,段子内容,点赞数. 2.首先我们确定URL为http://www.qiushibaike.com/hot/page/10(可以随便自行选择),先构造看看能否成功 构造代码: 1 # -*- coding:utf-8 -*- 2 import urllib 3 import urllib2 4 import re 5 6 page = 10 7 url = 'http://www

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

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

python3 爬虫之爬取糗事百科

闲着没事爬个糗事百科的笑话看看 python3中用urllib.request.urlopen()打开糗事百科链接会提示以下错误 http.client.RemoteDisconnected: Remote end closed connection without response 但是打开别的链接就正常,很奇怪不知道为什么,没办法改用第三方模块requests,也可以用urllib3模块,还有一个第三方模块就是bs4(beautifulsoup4) requests模块安装和使用,这里就不说