分布式爬虫之房天下实战(二)

上一篇我们已经完成了一个初始的scrapy爬虫模板,接下来开始分析我们要爬取的网页结构。
首先按下F12,观察网页结构,发现每个tr标签都在这个table标签下
分布式爬虫之房天下实战(二)_第1张图片
在这个网页中,我们要获取每个城市的省份或直辖市,还有城市的名称,还有城市所对应的初始链接。

第一获取直辖市/省份

这里先给出代码:

    def parse(self, response):
        # 获取所有的tr标签
        trs = response.xpath("//div[@class='outCont']//tr")
        province = None  # 先让省份为None,后续对省份赋值
        for tr in trs:
            tds = tr.xpath(".//td[not(@class)]")
            province_id = tds[0]
            province_text = province_id.xpath(".//text()").get()
            province_text = re.sub(r'\s', "", province_text)
            if province_text:
                province = province_text  # 再给省份赋值
            # 不抓取海外的房价信息
            if province == "其它":
                continue

分析这段代码,我们先获取了包含每一行的城市的tr标签,然后对其进行遍历,获取td中没有class属性的td标签,得到一个列表,然后在获取它的文本,去除多余的空白字符,最后将值赋值为province

分布式爬虫之房天下实战(二)_第2张图片

接下来获取城市和城市所对应的url地址:
接下来是代码:

			city_td = tds[1]
            city_links = city_td.xpath(".//a")
            for city_link in city_links:
                city = city_link.xpath(".//text()").get()  # 获取城市名称

                city_url = city_link.xpath("./@href").get()  # 获取城市链接

这里可以发现他们所对应的城市名称和url地址都在第二个td标签中,
所以这里获取所需要的东西就很简单:
分布式爬虫之房天下实战(二)_第3张图片

构建所有城市的新房和二手房的url地址

既然我们已经获取了所有城市的基础url,那么我们就可以在这个基础之上构建城市的新房和二手房的链接,上一节已经为大家展现出规律:
这里以城市安庆为例:

‘’‘
安庆的url地址: https://anqing.fang.com/
新房url地址: https://anqing.newhouse.fang.com/house/s/
二手房url地址: https://anqing.esf.fang.com/

其他地方房价的url地址规律都和'安庆' 的一样, 但有一个城市比较特别,那就是我们的首都北京:
	北京的新房url地址链接: https://newhouse.fang.com/house/s/
	二手房链接:https://esf.fang.com/
’‘’

有了规律之后构建就轻松很多了。

				url_moudle = city_url.split(".")
                scheme = url_moudle[0]
                domain = url_moudle[1]
                last = url_moudle[2]
                if "bj" in scheme:  # 构建北京的新房和二手房的url链接
                    newhouse_url = "https://newhouse.fang.com/house/s/"
                    esf_url = "https://esf.fang.com/"
                else:
                    # 构建城市新房链接
                    newhouse_url = scheme + ".newhouse." + domain + "." + last + "house/s/"
                    # 构建城市二手房链接
                    esf_url = scheme + ".esf." + domain + '.' + last

将基础的url用split进行拆分,获取一个列表,然后再按所需的要求进行url的构建。

构建生成器,将新房和二手房的url给与下一个函数经行解析

 # 构建生成器,将新房的详细信息传递个下一个函数数获取
                yield scrapy.Request(
                    url=response.urljoin(newhouse_url),
                    callback=self.parse_newhouse,
                    meta={"info": (province, city)}
                )

                # 构建生成器,将二手房信息传递给另一个函数获取
                yield scrapy.Request(
                    url=response.urljoin(esf_url),
                    callback=self.parse_esf,
                    meta={"info": (province, city)}
                )

分布式爬虫之房天下实战(二)_第4张图片
这样我们的第二步工作就完成啦

你可能感兴趣的:(python,爬虫,分布式爬虫)