[英]Unable to scrape the links of different albums from script tags using requests?
我在 python 中与 selenium 一起创建了一个脚本,以从网页中获取不同相册的链接。 我的脚本正在完美地解析它们。
由于相册是公开的,因此无需登录。
现在,我希望使用requests
和re
模块做同样的事情,因为我可以在页面源中看到不同专辑的名称。 但是,大多数脚本标签是相同的,所以我无法挖出包含不同专辑所需 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)
在使用requests
和re
,我收到了很多乱七八糟的东西,我无法从中挖掘出所需的链接,因为大多数脚本标签都相似:
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.