Hold_C 2020-09-01 19:12 采纳率: 20%
浏览 164
已采纳

scrapy-爬取京东笔记本电脑信息问题

出现的问题:
在下载器中间键中,把browser.quit()注释掉,可以正常的爬取,但是如果不注释掉,则会出现“目标计算机积极拒绝访问”的问题(如下图)
图片说明
这个是什么原因导致的啊?恳请大佬解答

爬虫代码:

import scrapy
from JD_books_Spider.items import brands_goods

class JD_compter_spider(scrapy.Spider):
    name = 'jd'
    def start_requests(self):
        urls = ['https://list.jd.com/list.html?cat=670%2C671%2C672&go=0']
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self,response):
        brand_href_list = response.xpath("//ul[@class='J_valueList v-fixed']/li")
        for li in brand_href_list:
             brand_href = li.xpath("./a/@href").extract_first()
             title = li.xpath('./a/@title').extract_first()
             if brand_href is not None:
                 brand_href = 'https://list.jd.com' + brand_href
                 yield scrapy.Request(url=brand_href, callback=self.single_brand_page, meta={'item': title})
             break


    def single_brand_page(self, response):
         bg = brands_goods()
         bg['brand_title'] = response.meta['item']
         goods_list = response.xpath("//ul[@class='gl-warp clearfix']/li")
         for good in goods_list:
             id = good.xpath('./div/div[3]/a/@href').extract_first()
             if id is not None:
                id =id.split('/')[-1].split('.')[0]
                bg['goods_id'] = id
                yield bg
         # page_num = response.xpath("//div[@class='page clearfix']/div/span[2]/em[1]/b/text()").extract_first()
         # page_num = int(page_num)
         # num = 1
         # for i in range(page_num-1):
         #     num += 2
         #     next_url = ('https://list.jd.com/list.html?cat=670%2C671%2C672&ev=exbrand_') + bg['brand_title'] + ('%5E&page=') + str(num)
         #     try:
         #        yield scrapy.Request(url=next_url, callback=self.single_brand_page)
         #     except:
         #        print(next_url)
         #        print("网址不可用")

下载器中间件代码:

from selenium import webdriver
from scrapy.http.response.html import HtmlResponse
from time import sleep
class JD_Spider_MiddleWare(object):
    def process_request(self, request, spider):
        options = webdriver.ChromeOptions()
        options.add_argument('--log-level=3')
        browser = webdriver.Chrome(options=options)
        browser.maximize_window()  # 最大化窗口

        browser.get(request.url)
        target = browser.find_element_by_id("J_promGoodsWrap_292")
        browser.execute_script("arguments[0].scrollIntoView();", target)  # 拖动至见到下一页为止
        sleep(5)
        browser.quit()
        return HtmlResponse(url=request.url, body=browser.page_source, request=request, encoding='utf-8')   # 返回response

class JD_spider_MiddleWare_return(object):
    def process_response(self, request, response, spider):
         return response
  • 写回答

2条回答 默认 最新

  • 临界状态 2020-09-03 18:00
    关注
                    browser.quit()
            return HtmlResponse(url=request.url, body=browser.page_source, request=request, encoding='utf-8')   # 返回response
    

    这还看不出来吗?return中用到了browser,肯定报错了
    你改成

    body = browser.page_source
    browser.quit()
            return HtmlResponse(url=request.url, body=body, request=request, encoding='utf-8')   # 返回response
    
    

    试试看

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题