通过异步爬取想要的评论列表,还可以吧循环打开,获取你想要的
贴的所有评论,这里就大家想一想,应该怎么修改代码。
import requests
import json
import asyncio
import aiohttp
import time
import re
# tieba=input('您想爬取的贴吧名称:')
tieba = '坦克世界'
# order=input('您想爬取几页呢?:')
order = '2'
# 下面函数从网页下载数据。
async def inpu(a, b):
url = 'https://tieba.baidu.com/f?kw={}&ie=utf-8&pn={}'.format(a, b)
async with aiohttp.ClientSession() as session:
async with session.get(url) as ponsere:
ht = await ponsere.text()
return ht
loop = asyncio.get_event_loop()
da = loop.run_until_complete(inpu(tieba, int(order) * 50))
# print(da)
'''
用re分析数据,取出需要的数据, analyze(分析)
re.findall 可以匹配所有符合条件的字段出来,提取出来的类型是列表
'''
async def analyze(dataas):
lyze = re.findall(r'<a rel="noreferrer" href="(.*)" title', dataas)
return lyze
loop = asyncio.get_event_loop()
lie = loop.run_until_complete(analyze(da))
urllis = []
for i in lie:
urllis.append('https://tieba.baidu.com{}'.format(i))
print(urllis,'程序列表')
async def xiang(lie):
try:
async with aiohttp.ClientSession() as session:
async with session.get(lie) as preseion:
xq= await preseion.text()
ly = re.findall(r'd_post_content j_d_post_content " style="display:;">(.*)</div><br>', xq)
print(ly)
except Exception as e:
print(e)
# #此re是获取帖子里面所有的评论 以列表形式显现出来
# loop=asyncio.get_event_loop()
# fens=loop.run_until_complete(xiang(lie))
#一共用了多长时间。
async def a(number, url):
print(number, '开始启动', time.time())
await xiang(lie=url)
print(number, '已经结束', time.time())
#loop_list() 通过获取的帖子链接,而开启多少个异步,这个比较快,但是你们想改的话直接改i就可以了,少一些循环不加代理封太快了,
def loop_list():
# for i,y in zip(range(1,len(urllis)),urllis):
# print(i,y)
task = []
for i,y in zip(range(1,len(urllis)),urllis):
print(y,i)
task.append(a(number=i, url=y))
print(y,i)
loop = asyncio.get_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(asyncio.wait(task))
loop_list()
学习完了,自己想一想怎么修改一下代码,让他爬取一个贴吧的所有帖子。欢迎大家在评论里写出来怎么改。