• 爬虫,爬取景点信息采用pandas整理数据


    一、首先需要导入我们的库函数

    导语:通过看网上直播学习得到,如有雷同纯属巧合。

    import requests#请求网页链接
    import pandas as pd#建立数据模型
    from bs4 import BeautifulSoup
    import io
    import sys#防止乱码
    sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')

    注:如有库安装不了,可参考上一篇随笔。

    二、源代码:

     1 import requests
     2 import pandas as pd
     3 from bs4 import BeautifulSoup
     4 import io
     5 import sys#防止乱码
     6 sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')
     7 def get_url(n):
     8     #获取网页链接
     9     urls=[]
    10     for i in range(1,n+1):
    11         urls.append('https://travel.qunar.com/p-cs299878-shanghai-jingdian-1-%s' %i)#获取n段网页链接
    12     return urls
    13 
    14     pass
    15 
    16 def get_data(url):#获取一段网页链接的数据
    17     r=requests.get(url)
    18     soup=BeautifulSoup(r.text,'lxml')#lxml一种不错的编译器
    19     ul=soup.find('ul',class_='list_item clrfix')#在网页中通过查找元素信息找到其名称
    20     lis=ul.find_all('li')#查找所有信息
    21     datalst=[]#定义一个数据字典
    22     for li in lis:
    23         dic={}#将需要查找的信息写入数据字典
    24         dic['景点名称']=li.find('span',class_='cn_tit').text
    25         dic['星级']=li.find('span',class_='cur_star')['style'].split(':')[1].replace('%','')#将数据中的百分号去掉实现初步数据清洗
    26         dic['经度']=li['data-lng']
    27         dic['纬度']=li['data-lat']
    28         datalst.append(dic)
    29     return datalst
    30      
    31 
    32 def get_alldata(n):#按要求查找多段网页链接的数据
    33     alldata=[]
    34     for url in get_url(n):
    35         alldata.extend(get_data(url))
    36     return alldata
    37 #print(get_alldata(2))
    38 df=pd.DataFrame(get_alldata(2))#建立pandas模型,按要求输出
    39 print(df)

    三、运行结果:

     四、存储:

    这里采用csv存储,在获取信息时写入以下代码把取得的信息写入表格中。

    1 def get_alldata(n):
    2     alldata=[]
    3     for url in get_url(n):
    4         alldata.extend(get_data(url))
    5     alldata=[str(x) for x in alldata]
    6     with open('describe.csv','a',encoding='utf8')as f:#在自己的运行目录下新建一个csv后缀名的文件夹然后打开以读写的方式
    7         f.write(','.join('%s' %id for id in alldata))#为了防止数字转字符串出错首先逐个遍历我们的列表然后再写入
    8     f.close()#操作完成应记住关闭文件夹。
    9     return alldata

    运行结果:

     

     如上图所示数据已成功写入csv文件夹中。

     小有瑕疵,初学见谅!!!

  • 相关阅读:
    Javascript创建对象的几种方式
    web化的远程桌面
    (原创) Asp.net XPS HighLight(高亮)CreateWatermark(水印 )
    C# 序列化和反序列化
    删除 HttpCookie
    (轉)AlertBox 彈出層(真的不錯哦)
    净高误差超过20mm
    如何处理并发
    ORM性能比对
    STL源码iterator和traits编程技法
  • 原文地址:https://www.cnblogs.com/Wang1107/p/11874600.html
Copyright © 2020-2023  润新知