scrapy 如何抓取使用模板引擎的站点?

p1iqtdky  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(128)

我试着用scrapyselenium刮一个站点,一开始我看到的结果是[ {{ certificant.FirstName }} {{ certificant.LastName }} ]
所以我想可能是因为页面还在加载,所以我添加了一个WebDriverWait,让按钮在提取数据之前显示,但我仍然得到了相同的结果。
我相信我得到的结果是从模板引擎做动态的东西,但如果是这样,我应该做什么,使刮实际上与此工作?
这是我目前手头上的东西

import scrapy

from scrapy import Request

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

class PjFx110Spider(scrapy.Spider):
    name = "pj_fx110"

    ROOT_URL = 'https://aplanner.ca'

    start_urls = [
        ROOT_URL
    ]

    def __init__(self):
        options = Options()

# options.add_argument("--headless")

        self.driver = webdriver.Chrome('./chromedriver', options=options)

    def start_requests(self):
        for url in self.start_urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        self.driver.get(response.url)
        WebDriverWait(self.driver, 3600).until(EC.presence_of_element_located((By.ID, 'btnShowResults')))

        lists = response.css('.list-group')
        name = lists.xpath('//*[@id="FPlist"]/div/ul[1]/li/span[1]/text()').extract()
        print(name, '---------lists----------')

非常感谢您的建议和意见。

qfe3c7zg

qfe3c7zg1#

我假设你想得到完整的计划者名单(你没有确认这一点)。你要求的是一个替代方案,在这里(我想,这与你最初的计划相差很远):

import requests
import pandas as pd
headers = {
'authority': 'aplanner.ca',
'path': '/WebServices/AptifyToolsServices.asmx/GetAll',
'scheme': 'https',
'accept': 'application/json, text/plain, */*',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'en-US,en;q=0.9',
'content-length': '0',
'content-type': 'application/json;charset=utf-8',
'cookie': 'ASP.NET_SessionId=345345345345',
'origin': 'https://aplanner',
'referer': 'https://aplanner/findaplanner',
'sec-ch-ua': '"Chromium";v="103", ".Not/A)Brand";v="99"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36 x-requested-with: XMLHttpRequest'
}
r = requests.post('https://aplanner.ca/WebServices/AptifyToolsServices.asmx/GetAll', headers=headers)
df = pd.read_json(r.json()['d'])
df.to_csv('aplanner.csv')
print(df.head())

这将在一分钟左右返回一个csv文件和一个 Dataframe 头,显示csv.file的格式。

jupyter notebook --NotebookApp.iopub_data_rate_limit=1.0e10

相关问题