请教大佬,在用pycharm调试的时候如何进入callback调用的函数
2018-02-10 22:14
483 查看
import scrapy
import re
from scrapy.http import Request
from urllib import parse
class JobboleSpider(scrapy.Spider):
name = 'jobbole'
allowed_domains = ['blog.jobbole.com']
start_urls = ['http://python.jobbole.com/all-posts/']
def parse(self, response):
"""
1. 解析文章列表页中的文章url并且交给scrapy下载后完成解析
2. 获取下一页的url并交给scrapy下载,完成后交给parse
"""
# 获取当前页面所有文章的url并且交给scrapy进行下载
post_nodes = response.css("#archive .floated-thumb .post-thumb a")
for post_node in post_nodes:
image_url = post_node.css("img::attr(src)").extract_first("")
post_url = post_node.css("::attr(href)").extract_first("")
yield Request(url=parse.urljoin(response.url, post_url), meta={"front_image_url": image_url},
callback=self.parse_detail)
# 提取下一页url
next_page = response.css(".next.page-numbers::attr(href)").extract_first()
if next_page:
yield Request(url=parse.urljoin(response.url, next_page), callback=self.parse)
def parse_detail(self, response):
"""
1.解析具体页面的内容
2.打算下载
"""
# 标题,创建时间,点赞数
title = response.css(".entry-header > h1::text").extract_first()
create_data = response.css(".entry-meta-hide-on-mobile::text").extract_first().strip().replace('·', '').strip()
praise_num = response.css(".vote-post-up h10::text").extract_first()
# 点赞数
fav_num = response.css(".bookmark-btn::text").extract_first().strip()
fav_num_re = re.match(".*?(\d).*", fav_num)
if fav_num_re:
fav_num = fav_num_re.group(1)
else:
fav_num = 0
# 评论数
comment_num = response.css('a[href = "#article-comment"] span::text').extract()[0]
comment_num_re = re.match(".*?(\d).*", comment_num)
if comment_num_re:
comment_num = comment_num_re.group(1)
else:
comment_num = 0
content = response.css('div.entry').extract()[0]
# 标签
tag_list = response.css('.entry-meta-hide-on-mobile a::text').extract()
tag_list = [element for element in tag_list if not element.strip().endwith('评论')]
tags = ",".join(tag_list)
pass
小弟学习利用scrapy爬取jobbole所有文章的信息,想确认具体页面信息爬取是否正确,进行单步调试的时候从yield Request(url=parse.urljoin(response.url, post_url), meta={"front_image_url": image_url},
callback=self.parse_detail)字段跳转不到parse_detail函数中,在函数中也打了断点但时就是在Request字段反复for循环,进入不到parse_detail中,请问各位大佬有什么好的办法
import re
from scrapy.http import Request
from urllib import parse
class JobboleSpider(scrapy.Spider):
name = 'jobbole'
allowed_domains = ['blog.jobbole.com']
start_urls = ['http://python.jobbole.com/all-posts/']
def parse(self, response):
"""
1. 解析文章列表页中的文章url并且交给scrapy下载后完成解析
2. 获取下一页的url并交给scrapy下载,完成后交给parse
"""
# 获取当前页面所有文章的url并且交给scrapy进行下载
post_nodes = response.css("#archive .floated-thumb .post-thumb a")
for post_node in post_nodes:
image_url = post_node.css("img::attr(src)").extract_first("")
post_url = post_node.css("::attr(href)").extract_first("")
yield Request(url=parse.urljoin(response.url, post_url), meta={"front_image_url": image_url},
callback=self.parse_detail)
# 提取下一页url
next_page = response.css(".next.page-numbers::attr(href)").extract_first()
if next_page:
yield Request(url=parse.urljoin(response.url, next_page), callback=self.parse)
def parse_detail(self, response):
"""
1.解析具体页面的内容
2.打算下载
"""
# 标题,创建时间,点赞数
title = response.css(".entry-header > h1::text").extract_first()
create_data = response.css(".entry-meta-hide-on-mobile::text").extract_first().strip().replace('·', '').strip()
praise_num = response.css(".vote-post-up h10::text").extract_first()
# 点赞数
fav_num = response.css(".bookmark-btn::text").extract_first().strip()
fav_num_re = re.match(".*?(\d).*", fav_num)
if fav_num_re:
fav_num = fav_num_re.group(1)
else:
fav_num = 0
# 评论数
comment_num = response.css('a[href = "#article-comment"] span::text').extract()[0]
comment_num_re = re.match(".*?(\d).*", comment_num)
if comment_num_re:
comment_num = comment_num_re.group(1)
else:
comment_num = 0
content = response.css('div.entry').extract()[0]
# 标签
tag_list = response.css('.entry-meta-hide-on-mobile a::text').extract()
tag_list = [element for element in tag_list if not element.strip().endwith('评论')]
tags = ",".join(tag_list)
pass
小弟学习利用scrapy爬取jobbole所有文章的信息,想确认具体页面信息爬取是否正确,进行单步调试的时候从yield Request(url=parse.urljoin(response.url, post_url), meta={"front_image_url": image_url},
callback=self.parse_detail)字段跳转不到parse_detail函数中,在函数中也打了断点但时就是在Request字段反复for循环,进入不到parse_detail中,请问各位大佬有什么好的办法
相关文章推荐
- JQuery ajax 如何设置同步调用(同时只能触发一个函数) 解决与层显示信息时候的冲突问题
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?
- pycharm 使用心得(八)如何调用另一文件中的函数
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?
- VS2013调试中如何看函数的上一级的调用
- c++ 函数调用在进入下一个循环的时候会再次初始化参数,将函数体直接写进去就正常
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?
- GUI程序如何使用控制台输出调试信息[zz][MFC调用win32窗口显示调试信息,使用AllocConsole 函数 ]
- Callback函数详解(我感觉,回掉函数的本质是函数指针,在业务做循环处理的时候,调用一下通知外部)
- gdb如何调用被调试任务的特定函数
- c++ 函数调用在进入下一个循环的时候会再次初始化参数,将函数体直接写进去就正常
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?
- 如何在页面每次刷新的时候可以调用一个javascript写的函数
- 调试一段数据库调用的时候,内存彪到1.5G。请教为啥捏?
- iPhone 我调试代码到某一个函数的调用处,结果单步调试无法进入函数里头。
- 程序调试的时候利用Call Stack窗口查看函数调用信息
- 对于 std::vector<T> , 当T没有赋值运算符函数的时候,如何调用vector push_back?
- 请教:在java中如何实现线程的函数互斥调用,用synchronized好像实现不了
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?