【爬虫实例3】异步爬取大量数据

农民  金牌会员 | 2022-9-16 17:20:09 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 899|帖子 899|积分 2697

1、导入模块
  1. import requests
  2. import csv
  3. from concurrent.futures import ThreadPoolExecutor
复制代码
2、先获取第一个页面的内容

分析得到该页面的数据是从getPriceData.html页面获取,并保存在csv文件中

得到url地址后,提取第一个页面内容
  1. def download(url, num):
  2.     resp = requests.post(url).json()
  3.     for i in resp['list']:
  4.         temp = [i['prodName'], i['lowPrice'], i['highPrice'], i['avgPrice'], i['place'], i['unitInfo'], i['pubDate']]
  5.         csvwrite.writerow(temp)
  6.    
  7. if __name__ == "__main__":
  8.     url = 'http://www.xinfadi.com.cn/getPriceData.html'
  9.     download(url)
  10.     print('success')
复制代码
** 此为第一个页面信息提取:**

3、获取更多的信息

分析页面数据显示规律,请求地址时页面携带页码和需要显示数据的条数,一共17362页,每页20条数据

设置100个线程提取17362页数据,同时每次请求时传入页码
  1. def download(url, num):
  2.     data = {
  3.         "limit": 20,
  4.         "current": num
  5.     }
  6.     resp = requests.post(url, data=data).json()
  7.     for i in resp['list']:
  8.         temp = [i['prodName'], i['lowPrice'], i['highPrice'], i['avgPrice'], i['place'], i['unitInfo'], i['pubDate']]
  9.         csvwrite.writerow(temp)
  10.     print(f'{num}页提取完成')
  11. if __name__ == "__main__":
  12.     url = 'http://www.xinfadi.com.cn/getPriceData.html'
  13.     # 设置100个线程
  14.     with ThreadPoolExecutor(100) as t:
  15.         for i in range(1, 17363):
  16.             t.submit(download(url, i))
  17.     print('success')
复制代码
4、完整代码

4、完整代码
  1. # 1、提取单页面import requests
  2. import csv
  3. from concurrent.futures import ThreadPoolExecutorf = open("data.csv", mode="w", encoding="utf-8")csvwrite = csv.writer(f)def download(url, num):
  4.     data = {
  5.         "limit": 20,
  6.         "current": num
  7.     }
  8.     resp = requests.post(url, data=data).json()
  9.     for i in resp['list']:
  10.         temp = [i['prodName'], i['lowPrice'], i['highPrice'], i['avgPrice'], i['place'], i['unitInfo'], i['pubDate']]
  11.         csvwrite.writerow(temp)
  12.     print(f'{num}页提取完成')
  13. if __name__ == "__main__":
  14.     url = 'http://www.xinfadi.com.cn/getPriceData.html'
  15.     # 设置100个线程
  16.     with ThreadPoolExecutor(100) as t:
  17.         for i in range(1, 17363):
  18.             t.submit(download(url, i))
  19.     print('success')
复制代码
以下为第1页~第199页数据:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农民

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表