【问题标题】:BeautifulSoup scraping imgBeautifulSoup 刮痧 img
【发布时间】:2020-03-14 20:09:22
【问题描述】:

我正在尝试抓取 website 以获取验证码图片链接。

使用浏览器检查元素,它已经出现,但在抓取时未显示。

我的目标是获得img

下面是我尝试过的代码。

import requests
from bs4 import BeautifulSoup

with requests.Session() as s:
    url = "https://myurl.com/"
    r = s.get(url)
    soup = BeautifulSoup(r.content, "html.parser")
    for item in soup.findAll("img"):
        print(item)

【问题讨论】:

  • 图片是用xhr加载的。您可以在页面源代码中看到加载它的 javascript 代码。
  • 这是一个event。普通soup.findAll 可能找不到。
  • 有没有办法提取它?
  • 在 python 中使用 selenium webdriver

标签: python beautifulsoup python-requests


【解决方案1】:

就像其他人说的那样,硒将帮助加载 img,让您可以抓取它。

from selenium import webdriver
from bs4 import BeautifulSoup
import time

browser = webdriver.Firefox()
url = 'https://myurl.com/'
browser.get(url)
time.sleep(10) # wait 10 seconds for the captcha to load
html = browser.page_source
soup = BeautifulSoup(html,features='html.parser')

imgs = soup.find_all('img')
for img in imgs:
    print(img)

返回:

<img alt="" id="yw1" src="/site/captcha/v/5dd3ccb47dd88/"/>

【讨论】:

    【解决方案2】:

    如果您转到“网络”选项卡,您将获得以下链接,该链接返回 JSON 格式的验证码图像。你不需要 Selenium。

    https://example.com/site/captcha/refresh/1/?_=1574163338269

    您需要将响应转换为 JSON,然后获取 url 键值。

    import requests
    
    with requests.Session() as s:
        url = "https://example.com/site/captcha/refresh/1/?_=1574163338269"
        r = s.get(url, verify=False)
        img = r.json()
        print(img['url'])
    

    网络标签

    【讨论】:

    • 这一点1/?_=1574163338269 在每个request/refresh 上都可以更改
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 2019-04-24
    • 1970-01-01
    • 2016-01-25
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多