首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在python中从img html中抓取src

如何在python中从img html中抓取src
EN

Stack Overflow用户
提问于 2019-08-23 19:06:02
回答 2查看 525关注 0票数 1

我试图抓取img的src,但我找到的代码返回了许多img src,但不是我想要的那个。我不知道我做错了什么。我在"https://www.tripadvisor.dk/Restaurant_Review-g189541-d15804886-Reviews-The_Pescatarian-Copenhagen_Zealand.html“上抓取TripAdvisor

这就是我要提取的HTML代码片段:

代码语言:javascript
运行
复制
 <div class="restaurants-detail-overview-cards-LocationOverviewCard__cardColumn--2ALwF"><h6>Placering og kontaktoplysninger</h6><span><div><span data-test-target="staticMapSnapshot" class=""><img class="restaurants-detail-overview-cards-LocationOverviewCard__mapImage--22-Al" src="https://trip-raster.citymaps.io/staticmap?scale=1&amp;zoom=15&amp;size=347x137&amp;language=da&amp;center=55.687988,12.596316&amp;markers=icon:http%3A%2F%2Fc1.tacdn.com%2F%2Fimg2%2Fmaps%2Ficons%2Fcomponent_map_pins_v1%2FR_Pin_Small.png|55.68799,12.596316"></span></div></span>

我希望代码返回:(来自src的子字符串)

代码语言:javascript
运行
复制
55.68799,12.596316

我试过了:

代码语言:javascript
运行
复制
    import pandas as pd
    pd.options.display.max_colwidth = 200
    from urllib.request import urlopen
    from bs4 import BeautifulSoup as bs
    import re

    web_url = "https://www.tripadvisor.dk/Restaurant_Review-g189541-d15804886-Reviews-The_Pescatarian-Copenhagen_Zealand.html"
    url = urlopen(web_url)
    url_html = url.read()

    soup = bs(url_html, 'lxml')
    soup.find_all('img')

    for link in soup.find_all('img'):
        print(link.get('src'))

返回的内容与此类似,但不是我需要的src:

代码语言:javascript
运行
复制
https://static.tacdn.com/img2/branding/rebrand/TA_logo_secondary.svg
https://static.tacdn.com/img2/branding/rebrand/TA_logo_primary.svg 
https://static.tacdn.com/img2/branding/rebrand/TA_logo_secondary.svg
data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-24 00:13:31

您可以使用requests和re来做到这一点。它只是src的坐标部分,它是基于位置的变量。

代码语言:javascript
运行
复制
import requests, re

p = re.compile(r'"coords":"(.*?)"')
r = requests.get('https://www.tripadvisor.dk/Restaurant_Review-g189541-d15804886-Reviews-The_Pescatarian-Copenhagen_Zealand.html')
coords = p.findall(r.text)[1]
src = f'https://trip-raster.citymaps.io/staticmap?scale=1&zoom=15&size=347x137&language=da&center={coords}&markers=icon:http://c1.tacdn.com//img2/maps/icons/component_map_pins_v1/R_Pin_Small.png|{coords}'
print(src)
print(coords)
票数 1
EN

Stack Overflow用户

发布于 2019-08-23 19:33:42

Selenium是一种变通方法,我对它进行了测试,效果非常好。您的位置如下:

代码语言:javascript
运行
复制
from selenium import webdriver

driver = webdriver.Chrome('chromedriver.exe')
driver.get("https://www.tripadvisor.dk/Restaurant_Review-g189541-d15804886-Reviews-The_Pescatarian-Copenhagen_Zealand.html")
links = driver.find_elements_by_xpath("//*[@src]")
urls = []
for link in links:
    url = link.get_attribute('src')
    if '|' in url:
        urls.append(url.split('|')[1])  # saves in a list only the numbers you want i.e. 55.68799,12.596316
    print(url)
print(urls)

上述['55.68799,12.596316']的结果

如果你以前没有使用过selenium,你可以在这里找到一个webdriver https://chromedriver.storage.googleapis.com/index.html?path=2.46/

或者在这里

https://sites.google.com/a/chromium.org/chromedriver/downloads

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57625093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档