首页 > 其他分享 >爬虫爬取链家网信息并可视化

爬虫爬取链家网信息并可视化

时间:2022-11-28 20:24:35浏览次数:44  
标签:content attr url text region list 爬虫 爬取 链家网

代码结构

1.导入库

点击查看代码
import requests
import parsel
import time
import random
import csv
2.设置参数
点击查看代码
header = {
    'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}
city = input("所在城市首字母缩写 或者全拼:")
detail_list = []

3.获取每个城市url

点击查看代码
def get_city_region_url(city):
    """获取城市每个区域的url
    返回url以及对应的区域名字"""
    url = f"https://{city}.lianjia.com/ershoufang/"
    response = requests.get(url=url,headers=header)
    selector = parsel.Selector(response.text)
    region_text = selector.css('body > div:nth-child(12) > div > div.position > dl:nth-child(2) > dd > div:nth-child(1) > div > a::text').getall()
    region_url = selector.css('body > div:nth-child(12) > div > div.position > dl:nth-child(2) > dd > div:nth-child(1) > div > a::attr(href)').getall()
    region = dict(zip(region_url,region_text))
    return region
4.获取数据保存在列表
点击查看代码
def get_city_region(city):
    region = get_city_region_url(city)
    region_url_list = list(region.keys())
    for region_url in region_url_list:
        url = f"https://{city}.lianjia.com/{region_url}"
        print(f"正在爬取{region[region_url]}的二手房信息")
        response = requests.get(url=url,headers=header)
        selector = parsel.Selector(response.text)
        #获取每个城市区域内房子信息最大页数
        max_page = eval(selector.css('.contentBottom .page-box .house-lst-page-box::attr(page-data)').get())['totalPage']
        #爬取每个区的每一页
        i = 1 #用以计数,达到最大页数之后停止
        while True:
            url_page = url+'pg'+str(i)
            response = requests.get(url=url_page, headers=header )
            #获取每一页的全部信息
            selector = parsel.Selector(response.text)
            href = selector.css('.sellListContent li .title a::attr(href)').getall()
            for link in href:
                time.sleep(random.random()*0.05)
                #循环访问每一个详情页面
                response_1 = requests.get(url=link,headers=header)
                selector_1 = parsel.Selector(response_1.text)
                content_list = []#每一页的内容写入列表
                content_list.append(region[region_url])
                content_list.append(selector_1.css('.title .main::text').get())   #标题
                content_list.append(selector_1.css('.price .total::text').get())               #价格
                global attr_list
                attr_list = selector_1.css('.base .content .label::text').getall() #房屋具体属性
                attr_list = attr_list[:11] #定义全局变量 拿到属性具体值为了容易保存到csv文件
                content_list_1 = selector_1.css('.base .content li::text').getall()#属性的具体值
                content_list.extend(content_list_1[:11])
                content_list.append(link)
                print(content_list)
                print(attr_list)
                detail_list.append(content_list)
                if(attr_list[-1]=='别墅类型'):
                    continue
            print(f"已经爬取完第{i}页内容")
            #当达到最大页数 停止
            i+=1
            if i == max_page:
                break
5.保存到csv
点击查看代码
def load_csv(data_list):
    with open('qingdao2房源.csv',mode='w',encoding='utf-8',newline='') as f:
        attr = []
        attr.extend(['所在区','标题','售价'])
        attr.extend(attr_list)
        writer = csv.DictWriter(f,fieldnames=attr)
        writer.writeheader() #写入表头
        writer = csv.writer(f)
        writer.writerows(data_list)
    print('保存成功')
6.运行程序
点击查看代码
get_city_region(city)
load_csv(detail_list)
**coding中的错误** 1. css选择器中 ::text选择文本 ::attr()选择属性 2. 列表attend方法添加一个列表元素 extend方法添加列表会将列表中的属性一个个添加进来 3. 常用文件写入参数 ![](/i/l/?n=23&i=blog/2615900/202211/2615900-20221128200829558-408230404.png)

标签:content,attr,url,text,region,list,爬虫,爬取,链家网
From: https://www.cnblogs.com/iron-kb/p/16933458.html

相关文章

  • Python 爬取单个网页所需要加载的URL地址和CSS、JS文件地址
    直接上代码:脱敏后自用的py采集代码,#!/usr/bin/envpython#-*-coding:utf-8-*-"""@author:Andy@file:xxx.py@time:下午05:50@desc:采集的文章数据进博客"""im......
  • 爬虫:BeautifulSoup(6)--select
    BeautifulSoup中的selectBeautifulSoup中的select也是过滤器的一种,个人认为要比find_all()好用一点find_all()的返回方式是列表,以主页为例,探究一下select#coding=utf-8fr......
  • python爬取小说网数据(数据库存储)
    一、BeautifulSoup解析:bs=BeautifulSoup(resp.text,'html.parser')book_img_text=bs.find('div',class_='book-img-text')ul=book_img_text.find('ul')li_list=ul......
  • 003爬虫之数据解析概述-正则表达式
    当我们爬到了网页的源代码之后,我们就需要对指定的数据进行获取,比如上一篇中只获取电影名称和上映时间,这里我们需要对获取的数据进行解析,以下提供四种解析方式:1.re解析2.b......
  • 这就是搜索引擎(2) 网络爬虫
    1.背景互联网网页是通用搜索引擎主要的处理对象,目前互联网上的网页数量以百亿计,所以通用搜索引擎首要面临的问题是:如何设计出高效的下载系统,将海量的网页数据传输到本地,......
  • 重庆大学生自主创业 创建重庆爬虫信息技术有限公司简称 爬虫科技
    ​​重庆爬虫信息技术有限公司​​关于我们:重庆爬虫信息技术有限公司(官网:​​爬虫科技​​中文域名:瓦力科技.com)是服务器于全国移动互联应用服务领域集APP定制、开发、优化......
  • Python 爬虫:爬《权力的游戏》中英对照版
    VOA英文网有中英对照版 《权力的游戏》 ​​http://www.tingvoa.com/html/454618.html​​,但是只能在线看,而且每次不小段的太不方便了,想把它爬下来整理成大篇的,放到kindle......
  • 爬取百思不得姐上面的视频
    之前有了爬取糗事百科的经验,先想试着爬取一下视频,并下载到本地。爬取目标:爬取​​百思不得姐​​上面的视频把视频下载到本地敲一次回车就下载一个视频0、爬取效果1、确定......
  • python爬虫——站酷数据获取
    1.站酷数据获取其中需要注意,本文使用了IP代理,以及不同的作品类型,他们详情页url拼接方式不同importrandomimporttimeimportdatetimeimportrequestsimportthrea......
  • python爬取某美食数据-全民厨子美食系列
    1、分析网页,爬取美食数据​​https://mip.xiachufang.com/explore/?page=2​​​​​​https://mip.xiachufang.com/explore/?page=3​​​url="​​​https://mip.xia......