当前位置:   article > 正文

爬取二手房信息--python爬虫_puthon 爬虫 二手房

puthon 爬虫 二手房

本次爬取贝壳找房网二手房信息
所使用的第三方库有:lxml、requests;
先贴上完整代码:

# -*- coding:utf-8 -*-
import requests
from lxml import etree
import re
import csv


class Spider(object):
    def __init__(self):
        self.url = 'https://sz.ke.com/ershoufang/{}/pg{}/'
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
        }

    def response(self, url):
        response = requests.get(url=url, headers=self.headers)
        response.encoding = 'utf-8'
        return response.text

    def parse(self, response, write):
        tree = etree.HTML(response)
        title = tree.xpath('//ul[@class="sellListContent"]//li[@class="clear"]/div[@class="info clear"]/div/a/text()')
        content = tree.xpath(
            '//ul[@class="sellListContent"]//div[@class="info clear"]//div[@class="houseInfo"]/text()')  # 有空值
        gzl = tree.xpath(
            '//ul[@class="sellListContent"]//div[@class="info clear"]//div[@class="followInfo"]/text()')  # 有空值
        x_pr = tree.xpath(
            '//ul[@class="sellListContent"]//div[@class="info clear"]//div[@class="totalPrice"]/span/text()')
        s_pr = tree.xpath(
            '//ul[@class="sellListContent"]//div[@class="info clear"]//div[@class="unitPrice"]/span/text()')
        new_content = []
        new_gzl = []
        for i in range(1, len(content), 2):
            new_content.append(content[i])
            new_gzl.append(gzl[i])

        for a, b, c, d, e in zip(title, new_content, new_gzl, x_pr, s_pr):
            write.writerow([a, re.sub('|\n', '', b), re.sub(' |\n', '', c), d, e])

    def crawl(self, url, write):
        response = self.response(url)
        items = self.parse(response, write)

    def main(self):
        address_list = ['luohuqu', 'futianqu', 'nanshanqu', 'yantianqu', 'baoanqu', 'longgangqu', 'longhuaqu',
                        'guangmingqu', 'pingshanqu', 'dapengxinqu']
        key = ['标题', '详情', '关注量', '总价(万)', '每平方米价格']
        for address in address_list:
            with open('{}.csv'.format(address), 'a', newline='', encoding='utf-8') as fp:
                write = csv.writer(fp)
                write.writerow(key)
                print('现在爬取%s的二手房信息' % address)
                flag = eval(input("是否继续爬取,继续输入1,跳过该区域的爬取输入0"))
                if flag == 1:
                    page_max = eval(input("请输入爬取的页数"))
                    for page in range(1, page_max + 1):
                        new_url = self.url.format(address, page)
                        self.crawl(new_url, write)
                        print('第%s页爬取完成' % page)
                    print('已完成%s爬取' % address)
                    print('\n')
                elif flag == 0:
                    continue


if __name__ == '__main__':
    S = Spider()
    S.main()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69

在本次学习的过程中遇到的难点:
1、第一次使用xpath来解析网页,颇有不习惯
2、解析出来的数据有部分不工整需格式化处理

主程序:

    def main(self):
        address_list = ['luohuqu', 'futianqu', 'nanshanqu', 'yantianqu', 'baoanqu', 'longgangqu', 'longhuaqu',
                        'guangmingqu', 'pingshanqu', 'dapengxinqu']
        key = ['标题', '详情', '关注量', '总价(万)', '每平方米价格']        # 文件首行信息
        for address in address_list:
            with open('{}.csv'.format(address), 'a', newline='', encoding='utf-8') as fp:
                write = csv.writer(fp)
                write.writerow(key)		# 写入第一行信息
                print('现在爬取%s的二手房信息' % address)
                flag = eval(input("是否继续爬取,继续输入1,跳过该区域的爬取输入0"))	    # 设置flag来控制程序变化
                if flag == 1:
                    page_max = eval(input("请输入爬取的页数"))
                    for page in range(1, page_max + 1):
                        new_url = self.url.format(address, page)	# 拼接成新url
                        self.crawl(new_url, write)	# 启动爬虫程序
                        print('第%s页爬取完成' % page)
                    print('已完成%s爬取' % address)
                    print('\n')
                elif flag == 0:
                    continue
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

通过观察url发现可变化参数,于是设置了address_list来控制爬取内容的区域、设置了通过输入page_max来指定爬取界面页数,由此拼接成新的url获取信息。

如发现可以改进的地方或者哪里做得不好,希望大家能够提出多多交流。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/192371
推荐阅读
相关标签
  

闽ICP备14008679号