2017-10-17 1 views
0

J'essaye de gratter des données d'une table, cependant, les données de table semblent avoir le même xpath. Voici un exemple de la table - http://www.hpft.nhs.uk/services/find-our-services/hertfordshire/cheshuntScrapy - comment puis-je scinder les données dans ce tableau?

Et quand j'utilise response.xpath('//td/text()').extract() il retourne le tableau entier. Je pensais que je pourrais peut-être utiliser des trajets x absolus, par ex. response.xpath('//tr/td[3]/text()').extract() qui dans l'exemple renvoie ['01992 818600', '01707 364012', '01707 364003'] - qui devrait, en théorie, être dynamique dans toutes les tables du site? Cependant, ce que je voudrais faire est d'ajouter le service, l'adresse et le téléphone pour chaque entrée de table comme une ligne séparée dans mon fichier csv de sortie. Mais je ne peux pas comprendre comment diviser les données de la liste que mes réponses retournent? J'ai mis en place des éléments que je vais vouloir utiliser.

Répondre

1

Vous devez boucle sur les lignes de table et collecter des champs individuels en éléments:

for row in response.xpath('//table[@class="map"]//tr[position() > 1]'): 
    item = dict() 
    item['service'] = row.xpath('./td[1]/text()').extract_first() 
    item['address'] = ' '.join(x.strip() for x in row.xpath('./td[2]/text()').extract()) 
    item['phone'] = row.xpath('./td[3]/text()').extract_first() 
    yield item