python网站怎么部署到windows2012
不知道这里有多少球迷,又有多少人知道“懂球帝”这个网站,今天我们的爬虫目标就是“懂球帝”的女神大会板块,开始吧。
老规矩,还是先给出代码:
数据爬取
获取 ID 信息
首先我们可以通过抓取懂球帝 App 的网络请求,拿到一个 API(具体如何做 App 抓包,可以在网络上查询下):
http://api.dongqiudi.com/search?keywords=type=all&page=
我们使用 Postman,来查看下该 API 的返回数据是怎样的:
可以看到,通过键入不同的 keywords,API 可以返回不同的信息,我们通过搜索“女神大会”,并从返回结果中获取 ID、URL 和 thumb 即可。
ID 后面用来拼接女神所在页面的 HTML 地址;而 thumb 则是女神的封面照片,收藏吧。
接下来,我们就可以根据该 API 的请求和响应,写一个抓取全部女神信息的函数:
def get_list(page): nvshen_id_list = [] nvshen_id_picture = [] for i in range(1, page): print("获取第" + str(i) + "页数据") url = 'http://api.dongqiudi.com/search?keywords=%E5%A5%B3%E7%A5%9E%E5%A4%A7%E4%BC%9A&type=all&page=' + str(i) html = requests.get(url=url).text news = json.loads(html)['news'] if len(news) == 0: print("没有更多啦") break nvshen_id = [k['id'] for k in news] nvshen_id_list = nvshen_id_list + nvshen_id nvshen_id_picture = nvshen_id_picture + [{k['id']: k['thumb']} for k in news] time.sleep(1) return nvshen_id_list, nvshen_id_picture代码还是比较简单的,循环请求 API 地址,并把 ID 和 thumb 保存到列表当中。
下载 HTML 页面
下面我们打开“懂球帝”网站,可以看出,每一个页面,都是由如下规律的页面组成的:
http://www.dongqiudi.com/news/****
而 news 后面接的就是我们上一步拿到的 ID 信息,比如我们拿到“刘岩”的 ID 为 813611,那么访问地址:
http://www.dongqiudi.com/news/813611
我们就来到了刘岩所在的页面。
并且,每个页面都会有前一期女神的得分情况,这个也是我们要关注的。
现在我们已经知道了网页地址的组成规律,那么就可以写函数,来下载网页到本地了。
def download_page(nvshen_id_list): for i in nvshen_id_list: print("正在下载ID为" + i + "的HTML网页") url = 'https://www.dongqiudi.com/news/%s' % i download = DownloadPage() html = download.getHtml(url) download.saveHtml(i, html) time.sleep(2) class DownloadPage(object): def getHtml(self, url): html = requests.get(url=url, cookies=config.session, headers=config.header).content return html def saveHtml(self, file_name, file_content): with open('html_page/' + file_name + '.html', 'wb') as f: f.write(file_content)download_page 函数接收一个列表(就是上一个函数的返回值 nvshen_id_list),通过 requests 库来请求页面并保存至本地。同时为了方式请求过于频繁,做了 2 秒的延时等待设置。
这里还要注意一点的是,这里是设置了 cookies 和 headers 的,否则是无法拿到正常 HTML 数据的。
cookies 和 headers 配置如下: