Python高级应用程序设计任务要求


Python高级应用程序设计任务要求


用Python实现一个面向主题的网络爬虫程序,并完成以下内容:
(注:每人一题,主题内容自选,所有设计内容与源代码需提交到博客园平台)

一、主题式网络爬虫设计方案(15分)
1.主题式网络爬虫名称

名称:爬取爱彼迎订房者信息(泉州地区)


2.主题式网络爬虫爬取的内容与数据特征分析
 
本次爬虫主要爬取爱彼迎订房者相关信息


3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)

本次设计方案:对爱彼迎订房者信息进行爬取,使用requests请求网页并爬取目标页面,将数据分析。

技术难点:数据爬取与采集,遍历标签属性。

 

二、主题页面的结构特征分析(15分)
1.主题页面的结构特征
airbnb.cn/users/show/85276582
Python高级应用程序设计任务要求_第1张图片

 

 


 

 


2.Htmls页面解析
 
 
3.节点(标签)查找方法与遍历方法
(必要时画出节点树结构)

 

查找方法:findAll

遍历方法:for循环嵌套


三、网络爬虫程序设计(60分)
爬虫程序主体要包括以下各部分,要附源代码及较详细注释,并在每部分程序后面提供输出结果的截图。
 
Python高级应用程序设计任务要求_第2张图片

 

 Python高级应用程序设计任务要求_第3张图片

 

 

 


1.数据爬取与采集
#  -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup
import records
import time

# 构造字典  
dats = []

def getinfo(url):
    # 获取网页数据
    try:
        #伪装UA
        ua = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}
        #读取网页
        r = requests.get(url, headers=ua)
        # 获取状态
        r.raise_for_status()
        # 返回数据
        return r.text
    except:
        return "错误"
        
        
def getUserInfo(html):
    '''
    获取用户基本信息
    '''
    # 初始化BeautifulSoup库
    soup = BeautifulSoup(html, "html.parser")
    # 初始化数组
    user = []
    # 查询img标签_1mgxxu3
    title = soup.select("img._1mgxxu3")
    # 检测用户是否存在
    if len(title) == 0:
        return 0
    # 取出用户名
    user_name = title[0].get('title')
    user.append(user_name)
    # 取出头像地址
    user_img = title[0].get('src')
    user.append(user_img)
    # 查询div标签_11dqbld7
    _11dqbld7 = soup.select("div._11dqbld7")
    # 检测
    if len(_11dqbld7) != 0:
        # 评价数
        user_c = _11dqbld7[0].get_text()
        # 实名认证状态
        user_auth = _11dqbld7[1].get_text()
    else:
        # 评价数
        user_c = '0'
        # 实名认证状态
        user_auth = ''
    # 取出数据
    user.append(user_c)
    user.append(user_auth)
    # 返回
    return user
        

 


2.对数据进行清洗和处理
def createDats(ids, user):
    # 创建字典
    data = {}
    # 清洗数据
    data['编号'] = ids
    data['用户名'] = user[0]
    data['头像地址'] = user[1]
    data['已提供'] = user[2]
    data['身份状态'] = user[3]
    # 加入字典
    dats.append(data)     

 

 
 
3.文本分析(可选):jieba分词、wordcloud可视化
 
4.数据分析
(例如:数据柱形图、直方图、散点图、盒图、分布图、数据回归分析等)
 
Python高级应用程序设计任务要求_第4张图片
 
 5.数据持久化
 
def bot(num):
    for i in range(num):
        n = i + 1
        print(n)
        url = "https://www.airbnb.cn/users/show/" + str(n)
        print(url)
        html = getinfo(url)
        user = getUserInfo(html)
        if user != 0:
            a = createDats(n, user)
            print(a)
        #延迟8s
        time.sleep(8)
    # 初始化组件
    results = records.RecordCollection(iter(dats))
    with open('user.xlsx', 'wb') as f:
        f.write(results.export('xlsx'))



# Function
# 要采集的用户个数
bot(2)

 

 

  6.附完整程序代码

#  -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup
import records
import time

# 构造字典  
dats = []

def getinfo(url):
    # 获取网页数据
    try:
        #伪装UA
        ua = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}
        #读取网页
        r = requests.get(url, headers=ua)
        # 获取状态
        r.raise_for_status()
        # 返回数据
        return r.text
    except:
        return "错误"
        
        
def getUserInfo(html):
    '''
    获取用户基本信息
    '''
    # 初始化BeautifulSoup库
    soup = BeautifulSoup(html, "html.parser")
    # 初始化数组
    user = []
    # 查询img标签_1mgxxu3
    title = soup.select("img._1mgxxu3")
    # 检测用户是否存在
    if len(title) == 0:
        return 0
    # 取出用户名
    user_name = title[0].get('title')
    user.append(user_name)
    # 取出头像地址
    user_img = title[0].get('src')
    user.append(user_img)
    # 查询div标签_11dqbld7
    _11dqbld7 = soup.select("div._11dqbld7")
    # 检测
    if len(_11dqbld7) != 0:
        # 评价数
        user_c = _11dqbld7[0].get_text()
        # 实名认证状态
        user_auth = _11dqbld7[1].get_text()
    else:
        # 评价数
        user_c = '0'
        # 实名认证状态
        user_auth = ''
    # 取出数据
    user.append(user_c)
    user.append(user_auth)
    # 返回
    return user
        
        
def createDats(ids, user):
    # 创建字典
    data = {}
    # 清洗数据
    data['编号'] = ids
    data['用户名'] = user[0]
    data['头像地址'] = user[1]
    data['已提供'] = user[2]
    data['身份状态'] = user[3]
    # 加入字典
    dats.append(data)     


def bot(num):
    for i in range(num):
        n = i + 1
        print(n)
        url = "https://www.airbnb.cn/users/show/" + str(n)
        print(url)
        html = getinfo(url)
        user = getUserInfo(html)
        if user != 0:
            a = createDats(n, user)
            print(a)
        #延迟8s
        time.sleep(8)
    # 初始化组件
    results = records.RecordCollection(iter(dats))
    with open('user.xlsx', 'wb') as f:
        f.write(results.export('xlsx'))



# Function
# 要采集的用户个数
bot(2)

 

四、结论(10分)

1.经过对主题数据的分析与可视化,可以得到哪些结论?
通过爬取订房者信息,可直观看出该订房者住过的所有房源信息,得出哪些房源更受欢迎。

2.对本次程序设计任务完成的情况做一个简单的小结。
本次爬取任务从最开始框架架构建到最后爬取成功,学到了很多新知识,但是仍然有很多细节代码没有正确的引用,在今后的学习生活中还需要不断地学习和应用。

你可能感兴趣的:(Python高级应用程序设计任务要求)