Scrapy 没有返回它应该返回的所有项目
Scrapy not returning all the items it should
我试图让 Scrapy 抓取一个网站,但将它限制为仅匹配特定模式的页面,这让我很头疼。
网站结构如下:
website.com/category/page1/
website.com/category/page2/
website.com/category/page3/
以此类推
我需要它从类别开始抓取,然后跟随所有指向另一个页面的链接(总共有375页,当然数量不固定).
问题是它在我停止之前爬了大约 10 页,但它只有 returns 10-15 个项目,而应该有 200+
这是我的代码,它不能正常工作:
class WSSpider(CrawlSpider):
name = "ws"
allowed_domains = ["website.com"]
start_urls = ["https://www.website.com/category/"]
rules = (
Rule(LinkExtractor(allow=("/level_one/page*",)), callback="parse_product", follow=True),
)
def parse_product(self, response):
sel = Selector(response)
sites = sel.css(".pb-infos")
items = []
for site in sites:
item = Website()
item["brand"] = site.css(".pb-name .pb-mname::text").extract()
item["referinta"] = site.css(".pb-name a::text").extract()
item["disponibilitate"] = site.css(".pb-availability::text").extract()
item["pret_vechi"] = site.css(".pb-sell .pb-old::text").extract()
item["pret"] = site.css(".pb-sell .pb-price::text").extract()
item["procent"] = site.css(".pb-sell .pb-savings::text").extract()
items.append(item)
#return items
f = open("output.csv", "w")
for item in items:
line = \
item["brand"][0].strip(), ";", \
item["referinta"][-1].strip(), ";", \
item["disponibilitate"][0].strip(), ";", \
item["pret_vechi"][0].strip().strip(" lei"), ";", \
item["pret"][0].strip().strip(" lei"), ";", \
item["procent"][0].strip().strip("Mai ieftin cu "), "\n"
f.write("".join(line))
f.close()
非常感谢任何帮助!
我发现了我的(愚蠢的)错误。
f = open("output.csv", "w")
其实应该是
f = open("output.csv", "a")
我曾经写过一个 python 抓取程序来在关闭之前下载内部 wiki 站点 - 运行 遇到一个问题,我们的 int运行et 或 wiki 服务器正在限制我的脚本访问内容。我认为有一种方法可以让 scrapy 访问更慢。
我遇到的另一个问题是身份验证 - wiki 的某些部分需要登录才能阅读。
另一个问题是你每次都在覆盖 output.csv...
parse_product
是异步的,请改用 CsvItemExporter
。
http://doc.scrapy.org/en/latest/topics/exporters.html#csvitemexporter
我试图让 Scrapy 抓取一个网站,但将它限制为仅匹配特定模式的页面,这让我很头疼。
网站结构如下:
website.com/category/page1/
website.com/category/page2/
website.com/category/page3/
以此类推
我需要它从类别开始抓取,然后跟随所有指向另一个页面的链接(总共有375页,当然数量不固定).
问题是它在我停止之前爬了大约 10 页,但它只有 returns 10-15 个项目,而应该有 200+
这是我的代码,它不能正常工作:
class WSSpider(CrawlSpider):
name = "ws"
allowed_domains = ["website.com"]
start_urls = ["https://www.website.com/category/"]
rules = (
Rule(LinkExtractor(allow=("/level_one/page*",)), callback="parse_product", follow=True),
)
def parse_product(self, response):
sel = Selector(response)
sites = sel.css(".pb-infos")
items = []
for site in sites:
item = Website()
item["brand"] = site.css(".pb-name .pb-mname::text").extract()
item["referinta"] = site.css(".pb-name a::text").extract()
item["disponibilitate"] = site.css(".pb-availability::text").extract()
item["pret_vechi"] = site.css(".pb-sell .pb-old::text").extract()
item["pret"] = site.css(".pb-sell .pb-price::text").extract()
item["procent"] = site.css(".pb-sell .pb-savings::text").extract()
items.append(item)
#return items
f = open("output.csv", "w")
for item in items:
line = \
item["brand"][0].strip(), ";", \
item["referinta"][-1].strip(), ";", \
item["disponibilitate"][0].strip(), ";", \
item["pret_vechi"][0].strip().strip(" lei"), ";", \
item["pret"][0].strip().strip(" lei"), ";", \
item["procent"][0].strip().strip("Mai ieftin cu "), "\n"
f.write("".join(line))
f.close()
非常感谢任何帮助!
我发现了我的(愚蠢的)错误。
f = open("output.csv", "w")
其实应该是
f = open("output.csv", "a")
我曾经写过一个 python 抓取程序来在关闭之前下载内部 wiki 站点 - 运行 遇到一个问题,我们的 int运行et 或 wiki 服务器正在限制我的脚本访问内容。我认为有一种方法可以让 scrapy 访问更慢。
我遇到的另一个问题是身份验证 - wiki 的某些部分需要登录才能阅读。
另一个问题是你每次都在覆盖 output.csv...
parse_product
是异步的,请改用 CsvItemExporter
。
http://doc.scrapy.org/en/latest/topics/exporters.html#csvitemexporter