爬取知乎话题async使用协程

import requests
import json
import time
from pyquery import PyQuery
import pandas as pd
from collections import OrderedDict
import multiprocessing
import asyncio
from functools import partial
# cookies = input(‘请输入Cookie:‘)
# url = input(‘请输入url:‘)
init_url = ‘https://www.zhihu.com/api/v4/topics/19562045/feeds/top_activity?offset=5&limit=10‘
headers = {
    ‘User-Agent‘: ‘Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1‘,
    ‘Cookie‘: ‘**‘,
    ‘Referer‘: ‘https://www.zhihu.com/topic/19606409/hot‘,
    ‘Host‘: ‘www.zhihu.com‘,
    ‘X-UDID‘: ‘AGDlzA1itw2PTr6aWsPp6OtejkxQ9iF7xgA=‘
}

def get_all_url(url):
    res = requests.get(url,headers=headers)
    data = json.loads(res.text)
    next_page_url = data[‘paging‘][‘next‘]
    url_list.append(next_page_url)
    print(len(url_list))
    end_page = data[‘paging‘][‘is_end‘]  # true
    if end_page:
        return url_list
    else:
        get_all_url(next_page_url)

async def get_all_data(url):
    future = loop.run_in_executor(None,partial(requests.get,url,headers=headers))
    #res = requests.get(url,headers=headers)
    res = await future
    data = json.loads(res.text)
    res_data = data[‘data‘]
    print(len(data_list))
    for i in res_data:
        final_data = OrderedDict()
        type = i[‘target‘][‘type‘]
        if type ==‘answer‘:
            final_data[‘title‘] = i[‘target‘][‘question‘][‘title‘] or ‘‘
            try:
                final_data[‘content‘] = PyQuery(i[‘target‘][‘content‘]).text()
            except Exception as e:
                final_data[‘content‘] = PyQuery(i[‘target‘][‘excerpt‘]).text()
            final_data[‘comment_count‘] = i[‘target‘][‘comment_count‘]
            final_data[‘voteup_count‘] = i[‘target‘][‘voteup_count‘]
            data_list.append(final_data)

if __name__ == ‘__main__‘:
    data_list=[]
    url_list = []
    get_all_url(init_url)

    tasks = [asyncio.ensure_future(get_all_data(url)) for url in url_list]
    loop = asyncio.get_event_loop()
    loop.run_until_complete(asyncio.wait(tasks))
    loop.close()

    df1 =pd.DataFrame(data_list)
    df1.to_excel(‘保险‘+time.strftime("%Y%m%d%H%M%S")+‘.xlsx‘,index=False)
    print(‘done‘)

原文地址:https://www.cnblogs.com/Erick-L/p/9415677.html

时间: 2024-08-27 15:55:59

爬取知乎话题async使用协程的相关文章

Python爬虫爬取知乎小结

博客首发至Marcovaldo's blog (http://marcovaldong.github.io/) 最近学习了一点网络爬虫,并实现了使用python来爬取知乎的一些功能,这里做一个小的总结.网络爬虫是指通过一定的规则自动的从网上抓取一些信息的程序或脚本.我们知道机器学习和数据挖掘等都是从大量的数据出发,找到一些有价值有规律的东西,而爬虫则可以帮助我们解决获取数据难的问题,因此网络爬虫是我们应该掌握的一个技巧. python有很多开源工具包供我们使用,我这里使用了requests.Be

scrapy 爬取知乎问题、答案 ,并异步写入数据库(mysql)

  python版本  python2.7 爬取知乎流程: 一 .分析 在访问知乎首页的时候(https://www.zhihu.com),在没有登录的情况下,会进行重定向到(https://www.zhihu.com/signup?next=%2F)这个页面, 爬取知乎,首先要完成登录操作,登陆的时候观察往那个页面发送了post或者get请求.可以利用抓包工具来获取登录时密码表单等数据的提交地址. 1.利用抓包工具,查看用户名密码数据的提交地址页就是post请求,将表单数据提交的网址,经过查看

利用 Scrapy 爬取知乎用户信息

思路:通过获取知乎某个大V的关注列表和被关注列表,查看该大V和其关注用户和被关注用户的详细信息,然后通过层层递归调用,实现获取关注用户和被关注用户的关注列表和被关注列表,最终实现获取大量用户信息. 一.新建一个scrapy项目 scrapy startproject zhihuuser 移动到新建目录下: cd zhihuuser 新建spider项目: scrapy genspider zhihu 二.这里以爬取知乎大V轮子哥的用户信息来实现爬取知乎大量用户信息. a) 定义 spdier.p

爬取知乎Python中文社区信息

爬取知乎Python中文社区信息,https://zhuanlan.zhihu.com/zimei 1 import requests 2 from urllib.parse import urlencode 3 from pyquery import PyQuery as pq 4 from pymongo import MongoClient 5 import json 6 import time 7 8 base_url = 'https://www.zhihu.com/api/v4/co

爬取知乎热榜标题和连接 (python,requests,xpath)

用python爬取知乎的热榜,获取标题和链接. 环境和方法:ubantu16.04.python3.requests.xpath 1.用浏览器打开知乎,并登录 2.获取cookie和User-Agent 3.上代码 1 import requests 2 from lxml import etree 3 4 def get_html(url): 5 headers={ 6 'Cookie':'', 7 #'Host':'www.zhihu.com', 8 'User-Agent':'Mozill

爬虫---Beautiful Soup 爬取知乎热榜

前两章简单的讲了Beautiful Soup的用法,在爬虫的过程中相信都遇到过一些反爬虫,如何跳过这些反爬虫呢?今天通过豆瓣网写一个简单的反爬中 什么是反爬虫 简单的说就是使用任何技术手段,阻止别人批量获取自己网站信息的一种方式.关键也在于批量. 反反爬虫机制 增加请求头---headers为了模拟更真实的用户场景 更改IP地址---网站会根据你的IP对网站访问频密,判断你是否属于爬虫 ua限制---UA是用户访问网站时候的浏览器标识,其反爬机制与ip限制类似 模拟帐号登录----通过reque

爬取微博热门话题

1 介绍 本文主要介绍爬取微博热门话题及话题下的微博.这是我毕业设计的数据来源,在这里先记录一下进展. 我买的阿里云服务器,[轻量应用服务器]预装宝塔Linux面板--三个月¥28.5.配置如下: 用起来还是很方便的,宝塔面板可视化文件上传下载,搭建web网站简便,可以定时爬虫程序.在阿里云服务器进行运行爬虫代码并连接到mysql数据库,运行环境如下: 类型 版本 服务器 CentOS Linux 7.4.1708 (Core) web服务器 Apache 2.4 数据库 mysql5.7 PY

爬取知乎某个问题下所有的图片

最近在逛知乎时,看到这么一个问题 最高赞的答案写了个爬虫,把所有的照片都爬下来了. 嘿嘿嘿,技术的力量 正好自己也在学习,加上答主的答案是很久之前的,知乎已经改版了,所以决定自己用Python3写一个练习一下(绝对不是为了下照片).... 设个小小的目标:爬取所有"女性"程序员的照片. 首先是要知道"总的回答数",这个比较简单: url="https://www.zhihu.com/question/37787176"html=requests.

Python 简单爬虫 爬取知乎神回复

看知乎的时候发现了一个 “如何正确地吐槽” 收藏夹,里面的一些神回复实在很搞笑,但是一页一页地看又有点麻烦,而且每次都要打开网页,于是想如果全部爬下来到一个文件里面,是不是看起来很爽,并且随时可以看到全部的,于是就开始动手了. 工具 1.Python 2.7 2.BeautifulSoup 分析网页 我们先来看看知乎上该网页的情况: 网址: ,容易看到,网址是有规律的,page慢慢递增,这样就能够实现全部爬取了. 再来看一下我们要爬取的内容: 我们要爬取两个内容:问题和回答,回答仅限于显示了全部