从网页抓取数据(“爬虫”从某个网站 爬取数据 )

优采云 发布时间: 2022-03-21 16:08

  从网页抓取数据(“爬虫”从某个网站

爬取数据

)

  一、原创

  我想买房,但是现在大西安可以说是一房难求,大家都在争先恐后地排队交资料和抽奖。截至目前,笔者已经参与了6个楼盘的抽签/选房,但由于种种原因,还是买不到合适的房子。

  。 . . . . .

  ——摘自《从网站定期抓取压缩包》

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

  二、思考

  首先使用Python的urlopen方法获取页面源码

  然后,调用Python BeautifulSoup方法库,实现HTML页面数据的灵活提取

  最后将提取的页面数据写入csv文件并打开

  三、说明

  

  Python3.6 + BeautifulSoup库+.bat脚本 主要脚本是getRegisDatas.py,writeCsv.py是写csv文件的脚本,openCsv.bat是打开csv文件的脚本,爬取的数据写入四、实现

  在 regisData.csv 文件中

  先去两个房管局网站

  

  

  主脚本定义了四个函数,分别是:get_soup()、get_page_url()、get_result_url()、get_regis_data() 每次运行前都会删除csv文件,然后重新生成csv文件,数据会被重新生成编写调用write_csv函数 将数据写入csv文件 注意:每次运行脚本前务必关闭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 = get_soup(url).find_all(href=re.compile('page'))

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 = gs.find(string=re.compile('意向登记结果公示')).split(' 意向')[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!')

  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)

  start %~dp0\regisData.csv

  五、终于

  

  Git 地址:

  好的!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线