繁体   English   中英

无法使用请求从脚本标签中抓取不同专辑的链接?

[英]Unable to scrape the links of different albums from script tags using requests?

我在 python 中与 selenium 一起创建了一个脚本,以从网页中获取不同相册的链接。 我的脚本正在完美地解析它们。

由于相册是公开的,因此无需登录。

现在,我希望使用requestsre模块做同样的事情,因为我可以在页面源中看到不同专辑的名称。 但是,大多数脚本标签是相同的,所以我无法挖出包含不同专辑所需 url 的所需部分。

网站链接

使用有效的硒:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = 'https://www.facebook.com/pg/bloo88/photos/?tab=albums'

def get_links(link):
    driver.get(link)
    items = sorted(set([item.get_attribute("href") for item in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "[role='presentation'] > a")))]))
    return items 

if __name__ == '__main__':
    with webdriver.Chrome() as driver:
        wait = WebDriverWait(driver,10)
        for elem in get_links(url):
            print(elem)

在使用requestsre ,我收到了很多乱七八糟的东西,我无法从中挖掘出所需的链接,因为大多数脚本标签都相似:

import re
import json
import requests

url = 'https://www.facebook.com/pg/bloo88/photos/?tab=albums'

res = requests.get(url,headers={"User-Agent":"Mozilla/5.0"}).text
data = re.findall(r'adp_PagePhotosTabAlbums[^,]+(.*?)();</script>', res)[0]
print(data)

如何使用请求抓取不同专辑的链接?

如果你想匹配你的 selenium 输出,它给了我 4 个链接,你可以使用以下正则表达式。 尝试一下

import requests, re

base = 'https://www.facebook.com/pg/bloo88/photos/?tab=album&album_id='
p = re.compile(r'{"node":{"id":"(\d+)"')
r = requests.get('https://www.facebook.com/pg/bloo88/photos/?tab=albums')
links = [base + i for i in p.findall(r.text)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM