Python / scrapy вложен в / если цикл работает некорректно - PullRequest
0 голосов
/ 03 июня 2018

Я использую scrapy для сканирования списка пользователей и их SteamID с www.tf2items.com/profiles/.

В настоящее время мой код выглядит следующим образом:

import scrapy

bot_words = [
"bot",
"BOT",
"[tf2mart]"
]

class AccountSpider(scrapy.Spider):
    name = "accounts"
    start_urls = [  
'file:///Users/max/Documents/promotebot/tutorial/tutorial/TF2ITEMS.htm'
    ]

def parse(self, response):
    for tr in response.css("tbody"):
        user = response.css("span a").extract()
        print(user)
        if bot_words not in response.css("span a").extract():
            for href in response.css("span a::attr(href)").extract():
                #yield response.follow("http://www.backpack.tf" + href, self.parse_accounts)
                print("this is a value")

Моя конечная цель - чтобы этот код напечатал что-то вроде:

a href = "/ profile / 76561198042757507"> Kchypark

это значение

ahref = "/ reports / 76561198049853548"> Ажен Колар

это значение

a href = "/ Profiles / 76561198036381323"> Могильный сдвиг15

это значение

С этим текущим кодом я мог бы даже ожидать

a href = "/ profile / 76561198042757507"> Kchypark

это значение

это значение

это значение

a href = "/ profile / 76561198049853548"> Ажен Колар

это значение

это значение

это значение

a href = "/ profile / 76561198036381323"> Grave Shifter15

это значение

этоэто значение

это avalue

Тем не менее, я получаю:

href = "/ reports / 76561198042757507"> Kchypark

a href = "/ reports / 76561198049853548"> Agen Kolar

a href = "/ profile / 76561198036381323"> Grave Shifter15

это значение

это значение

это значениезначение

Что я делаю не так?

1 Ответ

0 голосов
/ 07 июня 2018

ваш первый отпечаток с выводом списка href s

user = response.css("span a").extract()
print(user)

ваш код должен выглядеть так:

def parse(self, response):
    for tr in response.css("tbody"):
        for user in response.css("span a"):
            if bot_words not in user:
                print(user.extract())
                href = user.css('::attr(href)').extract()[0]
                print(href)
                #yield response.follow("http://www.backpack.tf" + href, self.parse_accounts)
                print("this is a value")

Кроме того, лучшая практика в терапии - использование элементов вместо функции print.

И помните о дублировании кода, например response.css("span a").extract()

...