受人之托,需要指定时间段内将近15个月的120个城市的每日天气情况。查看网络,发现一个发布各个城市的历史天气的网址,http://lishi.tianqi.com,观察网址发现其具有一定的规律性:比如http://lishi.tianqi.com/putian/201609.html指的是莆田的2016年9月的天气,前缀网址是一个固定的字符串“http://lishi.tianqi.com/”。然后我们知道爬取的天气是2015年的7月到2016年的11月。
基本思路就是首先提取到城市的列表,将城市全部转成拼音,得到一个拼音的城市名称列表。然后生成一个日期列表,每个城市和每个日期拼接得到网址。每个网址下都有一个很有规律的天气表格,包含日期,最高气温,最低气温,天气,风向,风力的信息。使用BeautifulSoup解析网页后就可以提取信息,以城市名称为单位,建立txt文件记录每个城市的信息,即可获取全部的天气情况。
考虑爬取网页的数量略大,可以考虑使用多进程,然后每个进程抓取的结果处理后各自保存成文件就可以了。为了伪装成浏览器访问,建立header列表,然后每个进程每次爬取都随机取出一个Header伪装。
所有要先把这个表格读进内存。
#coding:utf-8
import urllib2
import re
from bs4 import BeautifulSoup
import time
import random
import sys
import pandas as pd
import numpy as np
from numpy import mat
from multiprocessing import Pool
reload(sys)
sys.setdefaultencoding('utf-8')
'''参考文献 http://wangye.org/blog/archives/629/'''
#加载浏览器的user-agent
def getHeaderLst():
headerLst = []
headers = {
'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Ge