2017-07-18 4 views
0

Ich bin ein Neuling in Python und Scrapy und ich muss eine Website vollständig mit Tabellen (fast 80 Tabellen) gebaut kratzen.Scrapy: Wie kratze ich einen Link in einer Tabelle mit Bedingungen

Die Struktur der Website ist so etwas wie dieses:

<table> 
<tr> 
<td class="header" colspan="2">something</td> 
</tr> 

</table> 
<br/> 
<table> 
<tr> 
<td class="header" colspan="2">something2</td> 
</tr> 

</table> 
<br/> 
<table> 
<tr> 
<td class="header" colspan="2">something3</td> 
</tr> 
</table> 

Aber im Inneren eines von einer dieser Tabellen gibt es eine Liste der Mitglieder und ich brauche die Profilinformationen jedes Mitglieds zu extrahieren, aber jedes Profil ist variabel, so ändert sich die Tabelle mit ihren Informationen, abhängig von den Datenschutzeinstellungen.

Die Tabelle i kratzen müssen, ist so etwas, aber mit vielen Mitgliedern:

<table> 
      <tr> 
       <td colspan="4" class="header">members</td> 
      </tr> 
      <tr> 
       <td class="title">Name</td> 
       <td class="title">position</td> 
       <td class="title">hours</td> 
       <td class="title">observ</td> 
      </tr> 

      <tr> 
       <td class="c1">  
        1.- <a href="http://profiletype1" target="_blank">Homer Simpson</a> 
       </td> 
       <td class="c1"> 
        safety inspector 
       </td> 
       <td class="c1"> 
        10 
       </td> 
       <td class="c1"> 
        Neglect his duties 
       </td> 
      </tr> 
<table> 

Dann schaute ich auf den Code, und ich bemerkte, dass es 2 Arten von Profilen und Anfragen mit XPath tun sich nicht kreuzen.

Dann ist die Frage, wie kann ich die Profilinformationen von jedem Mitglied extrahieren, unter Berücksichtigung, dass, wenn ich den Link öffne ich zwei verschiedene Arten von Profil finden kann. Ich glaube, ich einen Code benötigen, das so etwas wie diese

def parse(self, response): 
if this xpath query doesn't work 
try this one 

Antwort

0

tut Ich glaube, Sie irgendwie schon Ihre Frage beantwortet, und die Lösung ist sehr domänenspezifische für mich in der Lage zu sein, eine richtige Antwort zu geben. Jedenfalls werde ich versuchen, Ihnen eine Vorstellung davon zu geben, wie ich das Problem angehen würde.

def parse(self, respose): 
    test = response.xpath("//some expression that only works in method one").extract_first() 
    if test is not None: 
     return self.parse_with_method_one(response) 
    return self.parse_with_method_two(response) 

def parse_with_method_one(self, response): 
    # your logic 

def parse_with_method_two(self, response): 
    # your logic 
+0

Danke für Ihre Antwort, aber jetzt habe ich ein anderes Problem. –

Verwandte Themen