【发布时间】:2014-03-05 15:48:54
【问题描述】:
我写了一个蜘蛛来抓取一个网站。 我能够生成所有页面网址(分页)。 我需要帮助来抓取所有这些页面,然后打印响应。
url_string="http://website.com/ct-50658/page-"
class SpiderName(Spider):
name="website"
allowed_domains=["website.com"]
start_urls=["http://website.com/page-2"]
def printer(self, response):
hxs=HtmlXPathSelector(response)
x=hxs.select("//span/a/@title").extract()
with open('website.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=' ',quotechar='|', quoting=csv.QUOTE_MINIMAL)
for i in x:
spamwriter.writerow(i)
def parse(self,response):
hxs=HtmlXPathSelector(response)
#sel=Selector(response)
pages=hxs.select("//div[@id='srchpagination']/a/@href").extract()
total_pages=int(pages[-2][-2:])
j=0
url_list=[]
while (j<total_pages):
j=j+1
urls=url_string+str(j)
url_list.append(urls)
for one_url in url_list:
request= Request(one_url, callback=self.printer)
return request
【问题讨论】:
-
您正在为每个
one_url响应重新创建“website.csv”文件。您应该创建一次(例如在__init__中)并将 CSV Writer 引用保存在您的蜘蛛属性中,在def printer中引用类似self.csvwriter的内容。此外,在for one_url in url_list:中,您应该使用yield Request(one_url, callback=self.printer)。在这里,您只返回最后一个请求 -
你能详细解释一下吗
标签: pagination scrapy