您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页「爬虫」从某网站爬取数据

「爬虫」从某网站爬取数据

来源:化拓教育网

一、缘 起

在上一篇文章 定时从某网站爬取压缩包 的基础上,这次实现的功能是从房管局信息登记网站爬取数据并写入csv文件

二、思 路

三、说 明

脚本结构
  1. Python3.6 + + .bat脚本
  2. 主脚本为getRegisDatas.pywriteCsv.py为写csv文件的脚本、openCsv.bat为打开csv文件的脚本,爬取的数据写入regisData.csv文件中

四、实 现

先上两张房管局网站

房管局登记网站 - 登记结束页面
房管局登记网站 - 结果公示页面
  • getRegisData.py
  1. 主脚本定义四个函数,分别为:get_soup()get_page_url()get_result_url()get_regis_data()
  2. 每次运行前会先删除csv文件,再重新生成csv文件并写入数据
  3. 调用write_csv函数写入数据到csv文件
  4. 注意:每次运行脚本前确保关闭csv文件,否则csv文件被占用程序会报异常
from autoGetRegisDatas.writeCsv import write_csv
from bs4 import BeautifulSoup
from urllib import request
import os
import re


def get_soup(url):
    """
    将页面用BeautifulSoup库处理
    :return:
    """
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0"
    }
    req = request.Request(url, headers=header)
    html = request.urlopen(req).read().decode('utf-8')
    soup = BeautifulSoup(html, 'html.parser')
    return soup


def get_page_url(url):
    """
    从登记结束页面爬取所有分页url,存入列表中
    :param url:
    :return:
    """
    page_url = []
    paging = 
    if paging is not []:
        for paging_i in range(len(paging)-1):
            page_url.append(url.split('xmgs')[0] + paging[paging_i]['href'])

    return page_url


def get_result_url(url):
    """
    从登记结束页面爬取所有的结果公示url
    :return:
    """
    result_url = []
    result_list = get_soup(url).find_all('span', string='结果公示')
    for result_list_i in result_list:
        result_url.append(url.split('xmgs')[0] + result_list_i['onclick'].split("='")[1].split("'")[0])

    if get_page_url(url) is not []:
        for page_i in get_page_url(url):
            result_list = get_soup(page_i).find_all('span', string='结果公示')
            for result_list_i in result_list:
                result_url.append(url.split('xmgs')[0] + result_list_i['onclick'].split("='")[1].split("'")[0])

    return result_url


def get_regis_data(result_url):
    """
    从结果公示页面获取每个楼盘登记的数据
    :return:
    """
    for result_url_i in result_url:
        regis_data = []
        gs = get_soup(result_url_i)
        house_name =  意向')[0].strip()
        regis_data.append(house_name)
        all_data = gs.find_all('font')
        for data_i in all_data:
            regis_data.append(data_i.string.strip())
        write_csv(regis_data)


os.remove('regisData.csv')
url1 = 'http://124.115.228.93/zfrgdjpt/xmgs.aspx?state=4'
url2 = 'http://124.115.228.93/zfrgdjpt/xmgsca.aspx?state=4'
lst = [url1, url2]
write_csv(['项目名', '房源数', '登记数', '资料核验数', '核验通过数', '刚需数', '普通数', '未通过数'])
for lst_i in lst:
    get_regis_data(get_result_url(lst_i))
os.system("openCsv.bat")
print('ok!')
  • writeCsv.py
    用于给csv文件写爬取的数据
import csv

def write_csv(row_list):
    """
    数据写入csv文件
    :return:
    """
    with open('regisData.csv', 'a', newline='') as csvfile:
        writer = csv.writer(csvfile, dialect='excel')
        writer.writerow(row_list)
  • openCsv.bat
    用于打开regisData.csv文件夹
start %~dp0\regisData.csv

五、最 后

regisData.csv

OK!

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务