Scrapy to df как не перезаписывать данные - PullRequest
0 голосов
/ 05 марта 2020

Итак, ладья ie здесь, с трудом записывает списанные данные в xlsx. Ну, первая страница отличная, проблема в том, что другие страницы перезаписывают предыдущие. Я полагаю, что это связано с поведением Yield, но, честно говоря, я не могу четко понять, почему.

Так что, как вы можете видеть из приведенного ниже кода, я могу прочитать всю информацию, которую хочу, но когда я отправляю все Информация для Excel, и я начинаю новую страницу, я не могу найти способ не перезаписать эту информацию, кто-то может мне помочь? Ценю!

def parse(self,response):
    product_name = response.css('.a-text-ellipsis .a-link-normal').css('::text').extract() #when having 2 tags, use ::text in the end, else, in the tag.
    #series_product_to_fill_df = pd.Series(product_name)

    date = response.css('.review-date::text').extract()
    rating_text = response.css('.review-rating').extract()
    rate =[] 
    for x in rating_text:
        extracting_stars = Selector(text=x).xpath('//span/text()').extract_first()
        rate.append(extracting_stars)
    title = response.css('.a-text-bold span::text').extract()
    reviewer_name = response.css('.a-profile-name::text').extract()
    badge = response.css('.c7y-badge-text::text').extract()
    review = response.css('.review-text-content span::text').extract()

    print('******************************************')

    df = pd.DataFrame(columns=['Date','Rate','Title','Reviewer_name','Badge', 'Review']) ##When passing the dictionary, using [] implies that all the data from that are rows and not columns, not generating index problems

    df['Date'] = pd.Series(date)
    df['Rate'] = pd.Series(rate)
    df['Title'] = pd.Series(title)
    df['Reviewer_name'] = pd.Series(reviewer_name)
    df['Badge'] = pd.Series(badge)
    df['Review'] = pd.Series(review)
    df['Product_name'] = pd.Series(product_name)

    #Reordering cols
    df = df[['Product_name','Date','Rate','Title','Reviewer_name','Badge', 'Review']]
    print(df)
    #filling all rows in the "Product_name"
    df['Product_name'].fillna( method ='ffill',inplace=True) #uses the only entry in the col and repeats it

    #excel_path
    destination_path = "C:\\Users\\xxxxxx\\export_dataframe.xlsx" 

    #excel
    df.to_excel(destination_path)

    #yield items
    yield df.to_excel(destination_path)

    #Next page scraping
    next_page = response.css('li.a-last > a::attr(href)').extract_first() #extracting all the link
    if next_page: 
        yield scrapy.Request(urljoin(response.url, next_page),callback=self.parse)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...