问候社区成员,
我正在Jupyter Notebook上使用python 3进行项目开发,我想使用站点地图来剪贴产品,到目前为止,我要做的是从站点地图中的URL获取名为df的数据框,然后我希望抓取每个网址使用Xpath,这是我的代码的结构
from scrapy.spiders import SitemapSpider
class ProductSpider(SitemapSpider):
name = 'ProductSpider'
sitemap_urls = ['the sitemap']
sitemap_rules = [('products', 'parse_product')]
def parse_product(self, response):
print('parse_product url:', response.url)
yield {'url': response.url}
from scrapy.crawler import CrawlerProcess
c = CrawlerProcess({
'USER_AGENT': 'Mozilla/5.0',
# save in file as CSV
'FEED_FORMAT': 'csv', # csv
'FEED_URI': 'urls.csv', #
})
c.crawl(ProductSpider)
c.start()
import pandas as pd
df=pd.read_csv('urls.csv')
直到现在一切正常,我将数据框命名为df,现在我想抓取数据框内的每个网址以废弃产品
import scrapy
class MySpider(scrapy.Spider):
custom_settings = {'FEED_URI' : 'products.csv'}
name = 'MySpider'
allowed_domains='website'
first_page=[df.url[1]]
all_others=[df.url[i] for i in range(2,400)]
start_urls = first_page+all_others
def parse(self, response):
for product in response.selector.xpath("//div[@class='container']"):
yield{
'title' = product.xpath("//div[class='title clearfix']/h1/text()").extract()
'img' = product.xpath("//div/a/img[@class='image-slide-link']").extract()
'description'=product.xpath("//div/p/ul/text()").extract()
'composition'=product.xpath("//div[@class='c-product__content']/text()").extract()
'Id'=product.xpath("//div[@class='product-json']/@Id/text()").extract()
}
for item in zip(title,image,description,composition):
scraped_info = {
'title' : item[0],
'image' : item[1],
'description': item[2],
'composition' : [item[3]]}
yield scraped_info
d = CrawlerProcess({
'USER_AGENT': 'Mozilla/5.0',
'FEED_FORMAT': 'csv',
'FEED_URI': 'products.csv',
})
d.crawl(Myspider)
d.start()
但是最后我得到了一个空文件products.cv,有人可以帮助我找到解决方案吗?我已经考虑了三个星期了!
谢谢!
答案 0 :(得分:0)
问题已解决:
我犯了一个愚蠢的错误,我不应该添加项目,因为我所有的信息都存储在zip中,而不是csv文件中,所以我只需要删除一些行,更确切地说是:项目行和直接检索信息。