使用Python请求抓取ajax网站

时间:2018-10-10 20:57:02

标签: python-3.x web-scraping python-requests

我正在尝试抓取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)

2 个答案:

答案 0 :(得分:1)

不,接收到的内容将始终相同,您必须自己将其预呈现以获取网页的最终版本。

您必须使用无头浏览器来执行网页上的javascript。

Prerender.IO 提供了您所需的几乎所有内容,您可以检查一下,设置非常简单。

const prerender = require('prerender');
const server = prerender();
server.start();

答案 1 :(得分:1)

我曾经回答过这样的问题,但提问者在本网站上给出了更好的答案cfscrapecfscrapeselenium好。顺便说一句,问题似乎已经解决,我不知道为什么。

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")