python网络爬虫--项目实战--scrapy爬取贝壳网(7)

2023-11-13

一、完整代码

bk.py

import json

import scrapy

from ScrapyAdvanced.items import HouseItem


class BkSpider(scrapy.Spider):
    name = 'bk'
    allowed_domains = ['bj.ke.com']
    start_urls = ['https://bj.ke.com/ershoufang/']

    def parse(self, response):

        # house_list_position = response.xpath("//div[@class='address']/div/div/a/text()").extract()
        # # 存在脏数据  一个空的脏数据 一个 正常数据
        # house_list_info = response.xpath("//div[@class='address']/div[@class='houseInfo']/text()").extract()
        house_list_address = response.xpath("//div[@class='address']")
        house_list_titles = response.xpath("//div[@class='title']/a/text()").extract()
        for i in range(len(house_list_address)):
            title = house_list_titles[i]

            house = house_list_address[i]
            position = house.xpath("./div/div/a/text()").extract_first()
            info = "".join(house.xpath("./div[@class='houseInfo']/text()").extract()).replace("\n", "").replace(" ","")
            tags = ";".join(house.xpath("./div[@class='tag']/span/text()").extract())
            total_price = house.xpath("./div[@class='priceInfo']/div[@class='totalPrice']/span/text()").extract_first() + "万"
            unit_price = house.xpath("./div[@class='priceInfo']/div[@class='unitPrice']/span/text()").extract_first()

            house_item = HouseItem()
            house_item["title"] = title
            house_item["position"] = position
            house_item["info"] = info
            house_item["tags"] = tags
            house_item["total_price"] = total_price
            house_item["unit_price"] = unit_price

            yield house_item

        page_info = json.loads(response.xpath("//div[@class='page-box house-lst-page-box']/@page-data").extract_first())
        page_url = response.xpath("//div[@class='page-box house-lst-page-box']/@page-url").extract_first()
        total_page = page_info.get("totalPage")
        current_page = page_info.get("curPage")
        # 当前页面不是总页面的时候, 也就是说 不是最后一页, 去请求下一页
        if current_page != total_page:
            url = page_url.replace("{page}", str(current_page+1) + "/")
            yield response.follow(url=url, callback=self.parse)

        # 当前页是第一页,发送请求后面所有的页
        # if current_page == 1:
        #     for i in range(2, total_page):
        #         url = page_url.replace("{page}", str(i))
        #         yield response.follow(url=url, callback=self.parse)

items.py

class HouseItem(scrapy.Item):

    title = scrapy.Field()
    position = scrapy.Field()
    info = scrapy.Field()
    tags = scrapy.Field()
    total_price = scrapy.Field()
    unit_price = scrapy.Field()

pipelines.py

class HousePipeline():

    def process_item(self, item, spider):

        if isinstance(item, HouseItem) and isinstance(spider, BkSpider):
            # 存储
            with open("house_list.csv", "a", encoding="utf-8") as house_file:
                csv_writer = csv.writer(house_file)
                row = [it[1] for it in item.items()]
                csv_writer.writerow(row)
		return item
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python网络爬虫--项目实战--scrapy爬取贝壳网(7) 的相关文章

  • 点击jtable中的超链接?

    如何为中的每条记录启用超链接JTable 我想要做的是 用户可以单击超链接 然后该超链接将显示他们可以编辑 更新的信息 或者 如何启用表数据的就地编辑 另一个问题是我目前正在使用以下方式来显示不同的屏幕 但这不是一种优雅的方式 我知道我们应
  • django 尝试了这些 url 模式

    当我尝试访问我的站点时 它会给出以下信息 使用 mysite urls 中定义的 URLconf Django 按以下顺序尝试了这些 URL 模式 管理员 当前 URL 与其中任何一个都不匹配 如果我访问该网站并附加 admin 它会将我带
  • 用于从链接中选择文本的 xpath 表达式

    我有这样的html文件内容 a class bf title Link to book href book 229920 book name a 帮我构造 xpath 表达式来获取链接文本 书名 我尝试使用 a 但表达式计算时没有结果 如果
  • xpath 根据子值选择父级

    我希望选择状态为 实时 的每个活动 我在 Drupal 的 XPath XML 解析器中使用它 并具有上下文基本查询和 xpath 查询字段 上下文 这是基本查询 所有其他查询都将在此上下文中运行 我目前有 语境 event status
  • HTMLUNIT getformbyname 网站中未指定表单名称

    我正在尝试使用 HTMLUNIT 单击网站上的按钮 我按照本教程进行操作http htmlunit sourceforge net gettingStarted html http htmlunit sourceforge net gett
  • PHP - 将文件系统路径转换为 ​​URL

    我经常发现项目中的文件需要从文件系统和用户浏览器访问 一个例子是上传照片 我需要访问文件系统上的文件 以便可以使用 GD 来更改图像或移动它们 但我的用户还需要能够从类似以下的 URL 访问文件example com uploads myp
  • 如何对URL进行分类? URL 的特点是什么?如何从 URL 中选择和提取特征

    我刚刚开始研究分类问题 这是一个两类问题 我的训练模型 机器学习 必须决定 预测是允许 URL 还是阻止它 我的问题非常具体 如何对 URL 进行分类 我应该使用普通的文本分析方法吗 URL 的特点是什么 如何从URL中选择和提取特征 我假
  • Bash 的源命令无法处理从互联网上卷曲的文件

    我正在尝试使用curl从互联网获取脚本文件 如下所示 source lt curl url echo done 我看到的是 完成 得到了回响before卷曲甚至开始下载文件 这是实际的命令和输出 bash 3 2 source lt cur
  • PHP显示图片从url到主页

    在没有人回答这个问题之后Php Rss feed 在 CDATA gt content encoded 中使用 img https stackoverflow com questions 31771729 php rss feed use
  • 如何从 URL 字符串中删除某些参数?

    我有这个var存储表示充满参数的 URL 的字符串 我正在使用 AngularJS 我不确定是否有任何有用的模块 或者可能使用纯 JavaScript 来删除不需要的 URL 参数而无需使用正则表达式 例如我需要删除 month 05并且
  • XPath 从子元素中排除文本

    我正在寻找输出 50ml milk 从以下代码 ul class ingredients list group li 50ml a href glossary milk class tooltip processed milk div cl
  • Web 应用程序中的 PathLocationStrategy 与 HashLocationStrategy

    使用的优点和缺点是什么 PathLocationStrategy 默认的 HTML 5 PushState 样式 HashLocationStrategy 哈希 URL 样式 例如 使用哈希位置策略将阻止通过 ID 滚动到元素的功能 但某些
  • 由于连接超时,无法通过 ImageIO.read(url) 获取图像

    下面的代码似乎总是失败 URL url new URL http userserve ak last fm serve 126 8636005 jpg Image img ImageIO read url System out printl
  • Django NoReverseMatch

    我有以下设置 landing pages views py urls py In urls py当我尝试访问时 我有以下内容 competition from django conf urls defaults import from dj
  • 如何忽略xpath中的第一个元素

    如何忽略第一个元素并获取其余元素 ul li a href some link a li li a href some link 2 a li li a href link i want to find a li ul Thanks 如果您
  • 如何将 URL 参数转换为 JavaScript 对象? [复制]

    这个问题在这里已经有答案了 我有一个像这样的字符串 abc foo def 5Basf 5D xyz 5 我怎样才能将它转换成这样的 JavaScript 对象呢 abc foo def asf xyz 5 到了 2021 年 请认为这个已
  • 如何在 J2EE 中进行动态 URL 重写

    回到我的 ASP NET 时代 我使用URL重写器 NET http urlrewriter net 进行动态 URL 重写 基本上 它是一个 HTTPModule 可以拦截页面请求并根据您定义的规则重写 URL 与 MOD REWRITE
  • 将文本中的 URL 替换为 HTML 链接

    不过 这是一个设计 例如 我放置了一个链接 例如 http example com http example com in textarea 我如何让 PHP 检测到它是http 链接 然后将其打印为 print a href http w
  • 从 SQL XML 列中的元素获取属性名称

    对于此 xml 在 SQL 2005 XML 列中
  • python lxml 使用iterparse编辑并输出xml

    我已经在 lxml 库上摆弄了一段时间了 也许我没有正确理解它 或者我错过了一些东西 但我似乎无法弄清楚在捕获某个 xpath 后如何编辑文件并且然后能够在逐个元素解析时将其写回到 xml 中 假设我们有这个 xml 作为示例

随机推荐