嘘~ 加载慢,正在从阿水的辣鸡服务器里偷取页面 . . .

记录第一次爬虫


记录第一次爬虫

某人为了在研毕中划水,问我会不会爬虫,按教程简单学了一下。

mac中安装python3

mac自带python,不过是2.7版本,但是现在一般使用3以上版本,安装过程如下:

下载python3

python官网:https://www.python.org/downloads/mac-osx/

从官网下载一个合适版本的安装包,直接打开安装,一直next就行。

安装完成之后,命令行输入python –version,这是python默认的环境还是python2,输入python3才是python3的版本。pip也是一样,需要输入pip3才是python3的环境。

如果需要让python变为python3的环境,需要进行环境配置,改变python的运行时环境指向。

配置python和pip环境

进入配置文件

vi ~/.bash_profile

添加如下如下三行配置,其中的数字按照下载的版本写,我这里是3.8

alias python="/Library/Frameworks/Python.framework/Versions/3.8/bin/python3.8"

export PATH=$PATH:/Library/Frameworks/Python.framework/Versions/3.8/bin/pip3.8

alias pip="/Library/Frameworks/Python.framework/Versions/3.8/bin/pip3.8"

保存退出后,输入如下命令重新加载配置文件:

source .bash_profile

然后再输入python –version,就变成刚刚安装的版本了,输入pip –version,pip的环境也成了python3的环境。

说明:本文以下的python和pip命令都是默认python3环境,如果你的不是,则请使用python3和pip3。

致谢:MAC 下 python3 环境安装和配置

VSCode中使用python

我这里使用VSCode,当然也可以用别的编辑器。

直接安装一个名为python的插件就行。

也可以装其他的辅助包,比如flake8和yapf用来语法检查和格式化代码,可以参考:用VScode配置Python开发环境

爬取数据

这里使用GoPUP,直接按照接口说明使用即可。

如果有地方用到百度指数登录后的cookie,直接使用cookie的value值即可。

导出数据

我这里使用pandas库将其导出为json格式。

先在终端输入pip list查看是否安装了pandas,没有的话需要安装pandas,终端输入pip install Pandas即可。

导出数据参考:https://tzzsmaster.blog.csdn.net/article/details/81137998

import gopup as gp
import pandas as pd

migration_scale_baidu_df = gp.migration_scale_baidu(area="西安市",indicator="move_in",date="20140101")

df = pd.DataFrame(migration_scale_baidu_df)

df.to_json("target.json",force_ascii=False,date_format = 'iso')

target.json为文件名,如果不存在会自动创建,force_ascii=False

最终结果

GoPUP中为迁徙数据提供了两个接口,一个迁入迁出详情,得到某一天内该地区的前一百迁入迁出规模(比例)。一个是迁徙规模,得到某段时间内该城市每天的迁徙规模指数。

最终的结果是得到三百多个城市每两个城市在某一天的迁徙指数值,迁徙指数=该城市在该天的迁出规模指数*该天该城市在另一个城市的迁徙规模。


import gopup as gp
import pandas as pd
from pandas.core.frame import DataFrame


#以第二列为索引读取excel数据
xlsx = pd.read_excel('./city.xlsx',index_col=1)
# 测试表
# xlsx = pd.read_excel('./312.xlsx',index_col=1)

#获取城市名
city = xlsx.index.values
# print(city)


#总迁出地详情
# migrationArea = {}
#总迁徙规模
# migrationScale = {}

#迁出地详情爬取失败的城市
migrationAreaErrorCity = []
#迁出规模爬取失败的城市
migrationScaleErrorCity = []


row = []
col = []
for item in city:
    row.append(item)
    col.append(item)

# 最终的表格
finalTable = pd.DataFrame(index=row,columns=col,dtype='float32')
# print(finalTable)

for item in city:
    # ----------详情----------
    baiduAreaData = gp.migration_area_baidu(area=item, indicator="move_out", date="20210107")
    # print(baiduAreaData)
    if isinstance(baiduAreaData,DataFrame):
        #收集总的详情数据
        # migrationArea[item] = baiduAreaData.values
        #单个城市数据导出成表格
        df = pd.DataFrame(baiduAreaData)
        df.to_excel("./migrationArea/"+item+".xlsx",encoding='utf-8')
    else:
        #获取读取失败的城市
        migrationAreaErrorCity.append(item)

    # -----------规模-----------
    baiduScaleData = gp.migration_scale_baidu(area=item, indicator="move_out", date="20210107")

    if isinstance(baiduScaleData,DataFrame):
        #收集总的规模数据
        # migrationScale[item] = baiduScaleData.loc['2020-01-07','迁徙规模指数']
        #单个城市数据导出成表格
        df = pd.DataFrame(baiduScaleData)
        df.to_excel("./migrationScale/"+item+".xlsx",encoding='utf-8')
    else: 
        #获取读取失败的城市
        migrationScaleErrorCity.append(item)

    # ------------填表-------------
    if  isinstance(baiduAreaData,DataFrame) & isinstance(baiduScaleData,DataFrame):
        for areaValues in baiduAreaData.values:
            for cityItem in city:
                if cityItem == areaValues[0]: #在详情中遍历查找city列表中的某个城市
                    finalTable.at[item,cityItem] = baiduScaleData.loc['2020-01-07','迁徙规模指数']*areaValues[2]





# 导出表格
finalTable.to_excel('./finalData.xlsx',encoding='utf-8')
# 未爬取到数据的城市导出到表格
pd.DataFrame(migrationAreaErrorCity).to_excel('./areaErrorCity.xlsx',encoding='utf-8')
pd.DataFrame(migrationScaleErrorCity).to_excel('./scaleErrorCity.xlsx',encoding='utf-8')

print(migrationAreaErrorCity)
print('--------------------')
print(migrationScaleErrorCity)
print('--------------------')
# print(finalTable)

相应API参考官网:pandas.DataFrame API


文章作者: 百念成诗
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 百念成诗 !
评论
  目录