请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,运行程序,进不去PARSE方法,为什么

-- coding: utf-8 --

import re
from urllib import parse
import scrapy

class ZhihuSpider(scrapy.Spider):
name = 'zhihu’
allowed_domains = [‘www.zhihu.com’]
start_urls = [‘https://www.zhihu.com/’]

headers = {
    "HOST": "www.zhihu.com",
    "Referer": "https://www.zhihu.com",
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36"
}
def parse(self, response):

    all_urls = response.css("a::attr(href)").extract()
    all_urls = [parse.urljoin(response.url, url) for url in all_urls]
    all_urls = filter(lambda x: True if x.startswith("https") else False, all_urls)
    for url in all_urls:
        print(url)
        match_obj = re.match("(.*zhihu.com/question/(\d+))(/|$).*", url)
        if match_obj:
            # 如果提取到question相关的页面则下载后交由提取函数进行提取
            request_url = match_obj.group(1)
            yield scrapy.Request(request_url, headers=self.headers, callback=self.parse_question)
        else:
            # 如果不是question页面则直接进一步跟踪
            yield scrapy.Request(url, headers=self.headers, callback=self.parse)

正在回答 回答被采纳积分+3

1回答

bobby 2018-11-03 10:17:35

你需要看一下console中的输出 看看这个url返回的状态码是否为非200状态码? 导致了无法进入parse方法

0 回复 有任何疑惑可以回复我~
  • 提问者 三肥牛元气 #1
    2018-11-03 10:37:05 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <400 https://www.zhihu.com/>: HTTP status code is not handled or not allowed
    
    老师这要怎么处理
    回复 有任何疑惑可以回复我~ 2018-11-03 10:39:20
  • 提问者 三肥牛元气 #2
    debug下执行到parse就不会执行进去了
    回复 有任何疑惑可以回复我~ 2018-11-03 10:59:57
  • bobby 回复 提问者 三肥牛元气 #3
    这是400错误表示的是你的post参数错误 你是否没有设置headers? https://git.imooc.com/coding-92/coding-92/src/master/ArticleSpider/ArticleSpider/spiders 你可以拷贝一下我这里提供的源码
    回复 有任何疑惑可以回复我~ 2018-11-05 13:23:00
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信