alibabaからカテゴリとそのURLをスクラップし、2列に入れる

こんにちは私はscrapを始めたばかりで、alibabaのカテゴリ別の商品ページ。それを削り取ってCSVファイルに書き込もうとしています。

これは、スプレッドシートで開いたときに表示したいビューです。

categories                           categories_urls

Agricultural Growing Media           its URL
Animal Products                      its URL
.                                    .
.                                    .
.                                    .

コード:-

# -*- coding: utf-8 -*-
import scrapy

class AlibabaCatagoriesSpider(scrapy.Spider):
name = 'alibaba_catagories'
allowed_domains = ['alibaba.com']
start_urls = ['https://www.alibaba.com/Products?spm=a2700.8293689.scGlobalHomeHeader.352.2ce265aa7GOmOF']

def parse(self, response):
    a = response.css('ul.sub-item-cont')
    for catag in a:
        item = {
           'categories': catag.css('li>a::text').extract(),
           'categories_url': catag.css('li>a::attr(href)').extract()
            }
        yield item

問題

  • \ nと空白は、カテゴリを削除するときに削除されます。
  • データの形式が適切ではありません

どうやって助けることができる

  • コードを修正して、
  • こすっている間に\ nと空白を削除するためのトリックを与える

望ましい形式です。

0
「望ましいフォーマット」とはどういう意味ですか?
追加された 著者 gangabass,
あるページにカテゴリの名前を、別のページにそれらのURLを入れたいのです。
追加された 著者 Riwaj Chalise,

4 答え

Scrapyを使うとかなり簡単:

def parse(self, response):

    for category_node in response.xpath('//ul[contains(@class, "sub-item-cont")]/li/a'):

        item = {
           'categories': category_node.xpath('./text()').extract_first().strip(),
           'categories_url': category_node.xpath('./@href').extract_first()
        }
        yield item
1
追加された
こんにちは、私はこれを見てください同じことを実装しようとしている - > 質問
追加された 著者 Riwaj Chalise,

次のセレクタを試してください

list(map(lambda x: x.replace('\n', '').strip(), response.xpath('//*[@class="cg-main"]//*[contains(@class, "sub-item-cont")]//li/a[@href]/text()').extract()))
0
追加された

You have to use normalize-space function to remove the spaces. It is not available or very complicated with .css selectors. I recommend you to use XPath. As described here. normalize-space just works with xpath not CSS selector

normalize-space関数を使ったXpathの例

 Product=   response.xpath('normalize-space(//*[@class="column one3"]/a/@href)').extract()
0
追加された
import requests
from bs4 import BeautifulSoup
def parser():
    url = 'https://www.alibaba.com/Products?spm=a2700.8293689.scGlobalHomeHeader.352.2ce265aa7GOmOF'
    source_code = requests.get(url)
    plain_text = source_code.text
    soup = BeautifulSoup(plain_text, "html.parser")
    name_dict = {}
    for l in soup.find_all('li'):
        content = l.find('a')
        if content:
            href = content.get('href')
            name = content.get_text()
            if href.find('_pid') != -1:
            name_dict[name] = href
    return name_dict

それはそれで掻くことがより簡単であるのでこれはBeautifulSoupモジュールによって作られます。この関数は、名前としてのキーとURLとしての値を持つ辞書を返します。

0
追加された