scraper.http.HtmlResponse类构造函数中“ body”的意义是什么?

时间:2018-12-14 01:08:30

标签: python scrapy

这可能是一个超级菜鸟问题...请原谅我.... 我读到有人构造了这样的HtmlResponse类:

response = HtmlResponse(url = 'http://asite.com', body=html, encoding='utf-8')

body = html是做什么的?是否指定源html?为什么即使指定了URL也需要源HTML?

3 个答案:

答案 0 :(得分:1)

要为您的问题提供背景信息,您需要了解Scrapy并不是发出直接请求的工具。 Scrapy是web-crawling framework,可作为项目独立工作。

我假设您认为response = HtmlResponse(url = 'http://asite.com', ...)是从该特定站点“下载”信息的一种方式,但这不是事实。 Scrapy旨在以指定的here特定方式和特定顺序工作。请求和响应并不能在Scrapy中单独使用,因为它有自己的调度程序,您可以在其中转储Request个对象,然后取回Response个对象。

Response对象不是要直接实例化的(实际上,我一生中从未实例化单个Response),因为它们是由Scrapy调度程序创建的,先前指定的Request

话虽如此,您当然仍然可以像在Python中使用其他Response一样实例化class,实际上,它很有用,但主要用于testing purposes,但仅此而已,这只是应该从Scrapy调度程序获得的内容的“无用”表示。

答案 1 :(得分:0)

参数 body :要以str(在Python 2中为unicode)访问已解码的文本,可以从可识别编码的Response子类(例如from tkinter import * from itertools import cycle from glob import glob from random import shuffle class MyTkinterFrame(Frame): def __init__(self, master, image_files): self.master = master self.x_center = int(self.master.winfo_screenwidth()*.5) self.y_center = int(self.master.winfo_screenheight()*.5) self.bg = Canvas(self.master) self.bg.pack(fill=BOTH, expand=YES) self.make_gif() self.make_picture(image_files) self.updatepicture() self.updategif() def make_gif(self): imagelist = glob('Images/My Tkinter Background/*.gif', recursive=True) self.giflist = [(PhotoImage(file=image)) for image in imagelist] self.gifcycle = cycle(self.giflist) self.bg_image=next(self.gifcycle) self.bg.gif_create = self.bg.create_image(self.x_center, self.y_center, image=self.bg_image) def make_picture(self,image_files): self.image_files = cycle(image_files) self.slides = PhotoImage(file=next(self.image_files)) self.img_object = self.slides self.bg.fg = self.bg.create_image(self.x_center, self.y_center, image=self.img_object) def updatepicture(self): #this function loops to update foreground image self.img_object = self.slides self.bg.itemconfig(self.bg.fg, image=self.img_object) self.slides = PhotoImage(file=next(self.image_files)) #for more pronounced error effect, lower delay(500) to 100 self.master.after(500, self.updatepicture) def updategif(self): #this function loops to update background image self.bg_image=next(self.gifcycle) self.bg.itemconfig(self.bg.gif_create, image = self.bg_image) self.master.after(25, self.updategif) if __name__ == '__main__': #this bit makes it pretty and easier to diagnose root = Tk() width = root.winfo_screenwidth() height = root.winfo_screenheight() root.geometry('%dx%d' % (width, height)) root.configure(background="#000000") #end #find foreground images image_files = glob('Images/My Tkinter Foreground/*.png', recursive=True) shuffle(image_files) e = MyTkinterFrame(root, image_files) root.mainloop() )中使用response.text

有关更多信息:Request-Response

答案 2 :(得分:0)

因为HTMLResponse不会下载与给定的url关联的页面。 HTMLResponse用于解析html(以xpath和CSS查询)。页面下载在另一段代码中进行。此外,通过与url对象关联的HtmlResponse,您可以轻松访问该属性。

您可以检查:

https://github.com/scrapy/scrapy/blob/1fd1702a11a56ecbe9851ba4f9d3c10797e262dd/scrapy/http/response/init.py