Tôi đã tạo ra con bot nhỏ này hoạt động bằng cách tìm kiếm thông qua danh sách các tham số. Nó hoạt động tốt cho đến khi có một số kết quả trên trang: sản phẩm_giá_euro
Đưa ra một danh sách các mặt hàng trống một nửa. Vì thế khi tôi đi cùng sản phẩm_giá_xu
Khi kết nối, tôi nhận được kết quả như thế này:
'giá' : '',76
Nhận được một nửa kết quả. Có cách nào dễ dàng để ngăn chặn việc thu thập các phần tử trống không? của tôi sản phẩm_giá_euro
Đầu ra trông như thế này:
[' 1', ' ', ' 2', ' ', ' 2', ' ', ' 1', ' ', ' 1', ' ', ' 1', ' ', ' 2', ' ']
Tôi chỉ muốn giữ "1", "2", v.v ...
Điều này trông giống như CSS. Có thể có một cái gì đó ở đây:
< span class="product-pricing__main-price" >
2
< span class="cents" >,79€
< /span >
Mã của tôi:
def start_requests(tự):
base_url="https://new.carrefour.fr/s?q="
test_file = open(r"example", "r")
reader = csv.reader(test_file)
cho hàng trong trình đọc:
if row:
url = hàng[0]
tuyệt đối_url = base_url+url
in(url_tuyệt đối)
mang lại Scrapy.Request(absolute_url, meta={'dont_redirect': True, "handle_httpstatus_list": [302, 301]}, callback=self.parse)
phân tích def (tự, phản hồi):
tên sản phẩm = reply.css("h2.label.title::text").extract()
Product_packaging = reply.css("div.label.packaging::text").extract()
sản phẩm_price_euros = reply.css("span.product-pricing__main-price::text").extract()
sản phẩm_price_cents = reply.css("span.cents::text").extract()
đối với tên, bao bì, price_euro, price_cent theo zip(product_name, Product_packaging, Product_price_euros, Product_price_cents):
năng suất { 'ean' : reply.css("h1.page-title::text").extract(), 'name': name+packaging, 'price': price_euro+price_cent}
Có ý tưởng gì không? :)
Nếu bạn chỉ lọc trốngEURcác yếu tố, làm thế nào để kết hợp chúng với các yếu tố chính xácxucuộc thi đấu?
Đầu tiên, IMHO, tôi nghĩ sẽ dễ dàng hơn nếu bạn duyệt qua các sản phẩm để thu thập dữ liệu của chúng. Ví dụ.
cho sản phẩm trong reply.css('.product-list__item'):
name = Product.css("h2.label.title::text").extract()
# ...
Vì vậy, bạn nhận được giá và xu như thế này:
>>> sản phẩm.css('.product-pricing__main-price ::text')
['2', ',99€']
>>> ''.join(product.css('.product-pricing__main-price ::text').getall())
'2,99€'
Tôi là một lập trình viên xuất sắc, rất giỏi!