我正在尝试抓取5秒钟后即可加载的网页。 我想使用lib请求。 有什么可以让请求等待的吗?
import requests
from bs4 import BeautifulSoup as soup
from time import sleep
link = 'https://www.off---white.com'
while True:
try:
r = requests.get(link, stream=False, timeout=8)
break
except:
if r.status_code == 404:
print("Client error")
r.raise_for_status()
sleep(1)
page = soup(r.text, "html.parser")
products = page.findAll('article', class_='product')
titles = page.findAll('span', class_='prod-title')[0].text.strip()
images= page.findAll('img', class_="js-scroll-gallery-snap-target")
for product in products:
print(product)
答案 0 :(得分:1)
不,接收到的内容将始终相同,您必须自己将其预呈现以获取网页的最终版本。
您必须使用无头浏览器来执行网页上的javascript。
Prerender.IO 提供了您所需的几乎所有内容,您可以检查一下,设置非常简单。
const prerender = require('prerender');
const server = prerender();
server.start();
答案 1 :(得分:1)
我曾经回答过这样的问题,但提问者在本网站上给出了更好的答案cfscrape
,cfscrape
比selenium
好。顺便说一句,问题似乎已经解决,我不知道为什么。
import cfscrape
import requests
from bs4 import BeautifulSoup as soup
url = "https://www.off---white.com"
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20180101 Firefox/47.0",
"Referer" : url
}
session = requests.session()
scraper = cfscrape.create_scraper(sess=session)
link = 'https://www.off---white.com'
r = scraper.get(link, headers=headers)
page = soup(r.text, "html.parser")