这周除了备战二级口译之外,阅读并实践了下崔神的《Python3网络爬虫开发实战》,试了下猫眼的排行榜数据和头条街拍图片的抓取和保存,充分感受到了python大法的强悍之处。作为一名python小小白和入坑区块链两年半的小韭菜,出于好奇心爬了下CoinMarketCap上的历史记录,代码虽短,情深可长,保存在csdn上,说不定以后的以后用得上哈哈哈~之后如果学了数据分析,会把爬出来的数据拿来练习练习!
提醒,要导入的包如下(要记得安装连接MongoDB吼吼):
import random #用于生成随机数
import time #用于打印系统时间
from pyquery import PyQuery as pq #用于解析提取所需数据
import requests #用于获取网页源码
from fake_useragent import UserAgent #用于随机生成user-agent
from openpyxl import workbook # 写入Excel表所用
from openpyxl import load_workbook # 读取Excel表所用
import os #用于指定保存路径
import re #用于提取信息
import pymongo #用于保存数据到mongodb中
第一步:抓“历史记录”主页的核心内容——日期
每页数据的url规律是https://coinmarketcap.com/zh/historical/+日期,比如2019年3月3日的数据页url是https://coinmarketcap.com/zh/historical/20190303/,因此,我们需要到“历史记录”页面拿到日期列表。
01.获取网页源代码
def get_one_page(url): #参数为"历史记录"主页的url链接
#为了不轻易被网站管理人员发现是爬虫,就伪装user-agent,模拟真实的浏览器去抓服务器响应的内容
ua = UserAgent()
headers = {"User-Agent": ua.random}
#构造请求头并得到服务器响应结果
response=requests.get(url,headers=headers)
#如果响应结果的状态码为200,说明正常访问,否则返回none
if response.status_code==200:
#返回响应内容,即网页源代码
return response.text #
return None
02.观察源代码并获取所需数据
可以发现,我们所需要的日期数据就在row节点下的href的属性值中,只要获取到href再提取下数据就可以拿到日期了。
def getUrlData(html):
#记得导入pyquery库
doc = pq(html)
#定位到row节点的a标签
page = doc('.row a')
#遍历提取href属性值,并添加到hisdate列表中
hisdate=[]
for data in page.items():
date=data.attr('