吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2552|回复: 13
收起左侧

[Python 转载] scrapy splash动态爬取链家二手房信息

  [复制链接]
楚子沦i 发表于 2021-8-1 11:21
[Python] 纯文本查看 复制代码
from scrapy_splash import SplashRequest
from scrapy.spiders import Spider
from scrapy import Request
from lianjia.items import LianjiaItem

lua_script = """
    function main(splash, args)
      assert(splash:go(args.url))
      assert(splash:wait(0.5))
      return {
        html = splash:html()
      }
end
"""

class LianjiaSpider(Spider):
    name = "lianjia"
    url = 'https://yt.lianjia.com/ershoufang/'
    def start_requests(self):
        yield SplashRequest(self.url,
                            callback=self.parse,
                            endpoint='execute',
                            args={
                                'lua_source': lua_script,
                                'images': 0,
                                'wait': 3
                            },
                            cache_args=['lua_source'])
    def parse(self, response):
        item = LianjiaItem()
        list_selector = response.xpath("//ul[@class='sellListContent']/li")
        for one_selector in list_selector:
            try:
                name = one_selector.xpath("div[@class='info clear']/div[@class='title']/a/text()").extract()[0]
                price = one_selector.xpath("div[@class='info clear']/div[@class='priceInfo']/div[1]/span/text()").extract()[0]
                item['name'] = name
                item['price'] = price

                yield item
            except:
                pass
        next_url = response.xpath("//div[@class='page-box house-lst-page-box']/a[last()]/text()").extract()[0]
        if next_url == "下一页":
            next_url = response.xpath("//div[@class='page-box house-lst-page-box']/a[last()]/@href").extract()[0]
            next_url = "https://yt.lianjia.com"+next_url
            yield SplashRequest(next_url,
                                callback=self.parse,
                                endpoint='execute',
                                args={
                                    'lua_source': lua_script,
                                    'images': 0,
                                    'wait': 3
                                },
                                cache_args=['lua_source'])


链家二手房的下一页是通过js动态加载的应该,如果使用普通的request请求是获取不到下一页的信息的,除非是自己写链接然后设置一个定值,但是实际上如果只是一个地区的话好说,换一个别的地区则容易出现问题,比如说烟台是100页,北京可能是80页,如果我们每次换地区都要重新改一下数据的话,我感觉比较麻烦,不过其实也不是很麻烦。。。。

不过后来发现可以通过splash来动态加载页面,然后请求这个splash的页面获取信息,这样就不怕获取不到下一页的链接了。

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
QingYi. + 1 + 1 我很赞同!
杨浦吴彦祖 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 楚子沦i 发表于 2021-8-1 20:26
狐白本白 发表于 2021-8-1 18:07
我有问题:
1.使用splash需要再设置中添加那些设置
2.我不知道你怎么怕的,加了哪些反扒机智,我用你这个 ...

并不是被检测,而是scrapy会获取网站的robots文件,你只要在setting中设置成false就行了
然后spalsh设置可以看这个https://zjzdmc.top/rcxx/215.html或者直接看代码也行,就是在setting中设置spalsh的url以及一些内容。
[Python] 纯文本查看 复制代码
SPLASH_URL = "http://localhost:8050/"
DUPEFILTER_CLASS = "scrapy_splash.SplashAwareDupeFilter"
HTTPCACHE_STORAGE = "scrapy_splash.SplashAwareFSCacheStorage"
SPIDER_MIDDLEWARES = {
    'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
   # 'lianjia.middlewares.LianjiaSpiderMiddleware': 543,
}
DOWNLOADER_MIDDLEWARES = {
    'scrapy_splash.SplashCookiesMiddleware': 723,
    'scrapy_splash.SplashMiddleware': 728,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 823,
   # 'lianjia.middlewares.LianjiaDownloaderMiddleware': 543,
}

狐白本白 发表于 2021-8-2 08:42
楚子沦i 发表于 2021-8-1 21:04
那这样的话,你先把翻页给取消掉,然后看看只爬一页咋样。
可以在for循环里面加一个time.sleep,加个延 ...

2021-08-02 08:41:22 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://yt.lianjia.com/ershoufang/ via http://localhost:8050/execute>
(failed 1 times): Connection was refused by other side: 10061: 由于目标计算机积极拒绝,无法连接。.
mudman 发表于 2021-8-1 12:09
hyhyx 发表于 2021-8-1 12:26
谢谢 支持支持 收藏了
waltz_cf 发表于 2021-8-1 15:35
谢谢分享,正好关注楼市,太棒了
yoyoma211 发表于 2021-8-1 15:46
这个有点厉害哈,支持下先
xinyu010 发表于 2021-8-1 16:35
先收藏了,回去慢慢看
cyw668 发表于 2021-8-1 17:30
感谢楼主分享
狐白本白 发表于 2021-8-1 18:07
我有问题:
1.使用splash需要再设置中添加那些设置
2.我不知道你怎么怕的,加了哪些反扒机智,我用你这个代码,查了一下这个库需要的配置,秒被检测
望指导
狐白本白 发表于 2021-8-1 20:58
楚子沦i 发表于 2021-8-1 20:26
并不是被检测,而是scrapy会获取网站的robots文件,你只要在setting中设置成false就行了
然后spalsh设置 ...

并不是,这些我都设置了,robots也修改了,但是就是
由于目标计算机积极拒绝,无法连接。.
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表