如何使我的代码更好?网页抓取,XPath



希望你们都过得好。

因此,直截了当,我的代码试图从网站上抓取结果,特别是餐厅的标题,评级和地址。

餐厅和地址的代码完美运行,但评级代码不仅带来评级,还带来其他值。

餐厅位://a[@class="arrivalName"]/text()

地址位://span[@class="address"]/text()

额定位://a[@rel="nofollow"]/text()

对于抓取,我将它们全部组合成:

'//a[@class="arrivalName"]/text()|//span[@class="address"]/text()|//a[@rel="nofollow"]/text()'

评级的问题实际上并没有那么糟糕,因为当我导出它时,我可以删除实际上不是评级的其他行。

我的问题来自结果在列表中的显示方式。例如,例如:

169:法巴托·赫拉多斯

170: 999 意见

171: 耶尔巴尔 2413

我想要这个,但有一列用于餐厅名称 (169(,另一列用于评级 (170(,第三列用于方向 (171(。

法巴托·赫拉多斯 | 999意见 | 耶尔巴尔 2413

我的代码如下,任何帮助将不胜感激!

第 1 部分

import pandas as pd import requests from lxml import html

第 2 部分

header = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36","X-Requested-With": "XMLHttpRequest"}
url = 'https://www.pedidosya.com.ar/restaurantes/buenos-aires?a=+colpayo+132&lng=-58.44132490000004&lat=-34.6184536&doorNumber=132&page=8'

第 3 部分

r = requests.get(url, headers=header)

第 4 部分

tree = html.fromstring(r.content)
title = tree.xpath('//a[@class="arrivalName"]/text()|//span[@class="address"]/text()|//a[@rel="nofollow"]/text()')
df = pd.DataFrame(title)

我快速编写了代码来帮助您,根据您的需要进行修改。

import pandas as pd
import requests
from lxml import html
header = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36","X-Requested-With": "XMLHttpRequest"}
url = 'https://www.pedidosya.com.ar/restaurantes/buenos-aires?a=+colpayo+132&lng=-58.44132490000004&lat=-34.6184536&doorNumber=132&page=8'
r = requests.get(url, headers=header)
tree = html.fromstring(r.content)
hotel_elements = tree.xpath('//section[@class="restaurantData"]')
hotels = []
for hotel in hotel_elements:
hotel_name = hotel.xpath('.//a[@class="arrivalName"]')
hotel_address = hotel.xpath('.//span[@class="address"]')
hotel_reviews = hotel.xpath('.//a[@rel="nofollow"]')
if hotel_name:
hotel_name = hotel_name[0].text_content()
if hotel_address:
hotel_address = hotel_address[0].text_content()
if hotel_reviews:
hotel_reviews = hotel_reviews[0].text_content()
hotels.append([hotel_name, hotel_address, hotel_reviews])

df = pd.DataFrame(hotels)

输出

0                                       1              2
0                 Double Crêpes           nBernardo de Irigoyen 1588n  144 opiniones
1            Empanadas del Chef                         nRosario 749n  230 opiniones
2     El Emporio Helado Natural                         nMurillo 749n   33 opiniones
3                    Vian-ditas                                      []             []
4                 Rios Peruanos                          nYerbal 787n   33 opiniones
5                   Puro Goyena                nAv. Pedro Goyena 293n             []
6   Rotisería Welcome Caballito  nAvenida Dr. Honorio Pueyrredón 784n  137 opiniones
7             Moreira Caballito               nJosé María Moreno 735n   62 opiniones
8               Game of Burgers                         nSaraza 1110n   82 opiniones
9                Salimos Fuerte                    nRamos Mejía 1088n             []
10        Fullescabio Caballito                    nCucha Cucha 1420n   59 opiniones
11                     Donovans                          nPerón 1596n             []
12         Don Ricardo Restobar              nJuan B. Ambrosetti 704n   37 opiniones
13                Titan Burgers                       nAranguren 334n   40 opiniones
14         El Rey de las Arepas       nDr. Juan Felipe Aranguren 336n             []

最新更新