使用 lxml 和 requests 进行网页抓取

Ris*_*lem 5 python lxml screen-scraping request web

我有一个包含酒店的网页,我想在其中获取所有酒店名称。我按照此页面的说明编写了代码,但没有成功。我的代码在这里:

from lxml import html
import requests

page = requests.get('web page url')
tree = html.fromstring(page.content)

hotel_name = tree.xpath('//span[@title="sr-hotel__name"]/text()')

print(hotel_name)
Run Code Online (Sandbox Code Playgroud)

我得到的只是一个空列表。有什么帮助吗?

Pad*_*ham 6

您需要添加用户代理:

\n\n
from lxml import html\nimport requests\nheaders= {"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36"}\npage = requests.get(\'http://www.booking.com/searchresults.et.html?label=gen173nr-1FCAEoggJCAlhYSDNiBW5vcmVmaEKIAQGYAQu4AQbIAQzYAQHoAQH4AQuoAgM&sid=1bc09296ee139ec3cb0edce87d7fb20a&dcid=1&class_interval=1&dest_id=67&dest_type=country&dtdisc=0&group_adults=2&group_children=0&hlrd=0&hyb_red=0&inac=0&label_click=undef&nha_red=0&no_rooms=1&postcard=0&redirected_from_city=0&redirected_from_landmark=0&redirected_from_region=0&review_score_group=empty&room1=A%2CA&sb_price_type=total&score_min=0&src=index&ss=Eesti&ss_all=0&ss_raw=Eesti&ssb=empty&sshis=0&traveller=other&nflt=ht_id%3D204%3B&lsf=ht_id%7C204%7C221&unchecked_filter=hoteltype\'\n                    , headers=headers)\ntree = html.fromstring(page.content)\nprint(page.text)\nhotel_name = tree.xpath(\'//span[@class="sr-hotel__name"]/text()\')\n\nprint(hotel_name)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这会给你:

\n\n
[\'\\nHotel Telegraaf\\n\', \'\\nRadisson Blu Hotel Ol\xc3\xbcmpia\\n\', \'\\nRadisson Blu Sky Hotel\\n\', \'\\nPark Inn by Radisson Central Tallinn\\n\', \'\\nPark Inn by Radisson Meriton Conference & Spa Hotel Tallinn\\n\', \'\\nMerchants House Hotel\\n\', \'\\nSwissotel Tallinn\\n\', \'\\nMy City Hotel\\n\', \'\\nNordic Hotel Forum\\n\', \'\\nHotel Palace by TallinnHotels\\n\', \'\\nHotel \xc3\x9clemiste\\n\', \'\\nTallink City Hotel\\n\', \'\\nHotel London by Tartuhotels\\n\', \'\\nJohan Design & SPA Hotel\\n\', \'\\nThe von Stackelberg Hotel Tallinn\\n\']\n
Run Code Online (Sandbox Code Playgroud)\n\n

但你应该阅读他们的服务条款

\n\n

我们的服务仅供个人和非商业用途。因此,您将不被允许对我们网站上通过商业或竞争为目的的转售链接(深层链接)提供的内容、信息、软件、产品或服务进行使用、复制、监控(例如蜘蛛、抓取) )、显示、下载下载或复制。

\n