写代码的时候发现,一条数据占一行,几百条数据要占掉好几百行
import asyncio
import pyppeteer
import requests
import csv
# 使用async关键字定义异步函数:
async def main(url):
# 打开浏览器
browser = await pyppeteer.launch(
headless=False,
# 设置浏览器界面尺寸
args=['--window-size=1215,733'],
# 设置页面尺寸
defaultViewport={'width': 1215, 'height': 653}
)
# 新建页面
page = await browser.newPage()
await asyncio.sleep(3.5)
# 访问页面
await page.goto(url)
# 设置延迟时间
await asyncio.sleep(3.5)
# 结合for循环,使用click功能模拟点击翻页
for page_num in range(1, 63):
# 使用querySelectorAll功能获取单页全部评论数据:class='single_comment'
comment_data = await page.querySelectorAll('td[width]')
# 使用for循环遍历获取到的单页全部评论数据
for data in comment_data:
for i in range(7):
comment_name = await data.querySelector('span')
if comment_name == 'NoneType':
print('无')
break
else:
comment_name = await comment_name.getProperty('title')
comment_name = await comment_name.jsonValue()
print(comment_name)
#表头:'项目批准号','项目类别','学科分类','项目名称','立项时间','项目负责人','专业职务','工作单位'
csv_file = open('spider.csv','a+',encoding='GB18030',newline='')
w = csv.writer(csv_file)
w.writerow([comment_name])
break
# 如果有多页评论数据,当进入最后一页评论页的时候 a[rel="next"] 不存在,跳出循环
if page_num == 62:
break
else:
await page.click('a[rel="next"]')
await asyncio.sleep(4)
# 关闭页面
await page.close()
# 关闭浏览器
await browser.close()
url = "http://fz.people.com.cn/skygb/sk/index.php/index/seach/?pznum=0&xmtype=%E4%B8%AD%E5%8D%8E%E5%AD%A6%E6%9C%AF%E5%A4%96%E8%AF%91%E9%A1%B9%E7%9B%AE&xktype=0&xmname=&lxtime=0&xmleader=&zyzw=0&gzdw=&dwtype=0&szdq=0&ssxt=0&cgname=&cgxs=0&cglevel=0&jxdata=0&jxnum=&cbs=&cbdate=0&zz=&hj="
# 使用get_event_loop()创建异步事件循环
loop = asyncio.get_event_loop()
# 使用run_until_complete()运行异步事件循环
loop.run_until_complete(main(url))
# 关闭异步事件循环
loop.close()
请大家指点一下迷津