希望你们一切都好。
直截了当,我的代码试图对网站的搜索结果进行网页抓取,特别是餐馆的名称,等级和地址。
餐厅和地址的代码可以正常工作,但是评级代码不仅带来评级,还带来其他值。
餐厅位://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:Farbatto Helados
170:999个意见
171:\ nYerbal 2413 \ n
我想要这个,但是要在餐厅名称栏中添加一列(169),在餐厅等级中添加一列(170),并在方向上添加第三列(171)。
Farbatto Helados | 999条评论| \ nYerbal 2413 \ n
以下是我的代码,非常感谢您的帮助!
第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)
答案 0 :(得分:0)
我已经快速编写了代码来帮助您,并根据您的需要进行修改。
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 1588\n 144 opiniones
1 Empanadas del Chef \nRosario 749\n 230 opiniones
2 El Emporio Helado Natural \nMurillo 749\n 33 opiniones
3 Vian-ditas [] []
4 Rios Peruanos \nYerbal 787\n 33 opiniones
5 Puro Goyena \nAv. Pedro Goyena 293\n []
6 Rotisería Welcome Caballito \nAvenida Dr. Honorio Pueyrredón 784\n 137 opiniones
7 Moreira Caballito \nJosé María Moreno 735\n 62 opiniones
8 Game of Burgers \nSaraza 1110\n 82 opiniones
9 Salimos Fuerte \nRamos Mejía 1088\n []
10 Fullescabio Caballito \nCucha Cucha 1420\n 59 opiniones
11 Donovans \nPerón 1596\n []
12 Don Ricardo Restobar \nJuan B. Ambrosetti 704\n 37 opiniones
13 Titan Burgers \nAranguren 334\n 40 opiniones
14 El Rey de las Arepas \nDr. Juan Felipe Aranguren 336\n []