【问题标题】:Trying to scrape image urls but not able to get it using beautiful soup and python试图抓取图片网址,但无法使用漂亮的汤和 python 获取它
【发布时间】:2021-02-11 04:44:26
【问题描述】:

我正在抓取这个链接:https://www.americanexpress.com/in/credit-cards/all-cards/?sourcecode=A0000FCRAA&cpid=100370494&dsparms=dc_pcrid_408453063287_kword_american%20express%20credit%20card_match_e&gclid=Cj0KCQiApY6BBhCsARIsAOI_GjaRsrXTdkvQeJWvKzFy_9BhDeBe2L2N668733FSHTHm96wrPGxkv7YaAl6qEALw_wcB&gclsrc=aw.ds

并获取图片网址

from urllib.request import urlopen
from bs4 import BeautifulSoup
import json


AMEXurl = ['https://www.americanexpress.com/in/credit-cards/all-cards/?sourcecode=A0000FCRAA&cpid=100370494&dsparms=dc_pcrid_408453063287_kword_american%20express%20credit%20card_match_e&gclid=Cj0KCQiApY6BBhCsARIsAOI_GjaRsrXTdkvQeJWvKzFy_9BhDeBe2L2N668733FSHTHm96wrPGxkv7YaAl6qEALw_wcB&gclsrc=aw.ds']
identity = ['filmstrip_container']

html_1 = urlopen(AMEXurl[0])
soup_1 = BeautifulSoup(html_1,'lxml')
address = soup_1.find('div',attrs={"class" : identity[0]})

for x in address.find_all('div', class_ = 'filmstrip-imgContainer'):
    print(x.find('div').get('img'))

但我得到如下输出:

None
None
None
None
None
None
None

下面是 html 代码的图像,我试图从中获取图像 url:

这是我想要获取网址的页面部分

我想知道代码中是否有任何更改,以便我获取所有图片网址。

【问题讨论】:

    标签: python web-scraping beautifulsoup python-requests scrapinghub


    【解决方案1】:

    它们是从脚本标签动态加载的。您可以轻松地从响应的 .text 中对它们进行正则表达式。下面的正则表达式专门匹配您说要检索并在图片中显示的 7 张图像。

    import requests, re
    
    r = requests.get('https://www.americanexpress.com/in/credit-cards/all-cards/?sourcecode=A0000FCRAA&cpid=100370494&dsparms=dc_pcrid_408453063287_kword_american%20express%20credit%20card_match_e&gclid=Cj0KCQiApY6BBhCsARIsAOI_GjaRsrXTdkvQeJWvKzFy_9BhDeBe2L2N668733FSHTHm96wrPGxkv7YaAl6qEALw_wcB&gclsrc=aw.ds').text
    p = re.compile(r'imgurl":"(.*?)"')
    links = p.findall(r)
    print(links)
    

    正则表达式解释:


    您是否决定使用可以匹配的更昂贵的硒

    links = [i['src'] for i in driver.find_all_elements_with_css_selector('.filmstrip-imgContainer img')]
    

    【讨论】:

    • 如果您不介意的话,如果您能帮助我获得“立即申请”和“了解更多”网址,我将非常高兴。
    【解决方案2】:

    试试这个

    import urllib
    from urllib.request import urlopen
    from bs4 import BeautifulSoup
    import json
    import requests
    import re
    
    AMEXurl = ['https://www.americanexpress.com/in/credit-cards/all-cards/?sourcecode=A0000FCRAA&cpid=100370494&dsparms=dc_pcrid_408453063287_kword_american%20express%20credit%20card_match_e&gclid=Cj0KCQiApY6BBhCsARIsAOI_GjaRsrXTdkvQeJWvKzFy_9BhDeBe2L2N668733FSHTHm96wrPGxkv7YaAl6qEALw_wcB&gclsrc=aw.ds']
    identity = ['filmstrip_container']
    
    r = requests.get(AMEXurl[0])
    
    html_1 = urlopen(AMEXurl[0])
    
    soup_1 = BeautifulSoup(r.content,'lxml')
    

    提取所有图像

    images = soup_1.find_all('img', src=True)
    
    for img in images:
        print(img['src'])
    

    所有显示 png 文件的图像标签。

    platinum_card_image=soup_1.find('img', src=re.compile('Platinum_Card\.png$'))
    print(platinum_card_image.get('src'))
    

    所有显示 svg 文件的图片标签。

    platinum_card_image=soup_1.find_all('img', src=re.compile('\.svg$'))
    
    for img in platinum_card_image:
        print(img.get('src'))
    

    编辑

    images_7 = soup_1.select('script')[8].string.split('__REDUX_STATE__ = ')
    data = images_7[1]
    
    for d in json.loads(data)["modelData"]['componentFeaturedCards']['cards']:
        print(d['imgurl'])
    

    【讨论】:

    • 非常感谢您的代码,但很遗憾我无法获取所有 7 张卡片的所有图片网址。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多